提交 4bcac75b 编写于 作者: E Eric Blake

storage: avoid s[n]printf

* src/storage/storage_backend.c (virStorageBackendCreateQemuImg)
(virStorageBackendCreateQcowCreate): Use virAsprintf instead.
* src/storage/storage_backend_disk.c
(virStorageBackendDiskCreateVol, virStorageBackendDiskPartFormat):
Likewise.
上级 57ae4c04
...@@ -636,7 +636,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, ...@@ -636,7 +636,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags ATTRIBUTE_UNUSED)
{ {
int ret = -1; int ret = -1;
char size[100]; char *size = NULL;
char *create_tool; char *create_tool;
const char *type = virStorageFileFormatTypeToString(vol->target.format); const char *type = virStorageFileFormatTypeToString(vol->target.format);
...@@ -726,7 +726,10 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, ...@@ -726,7 +726,10 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
} }
/* Size in KB */ /* 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 */ /* KVM is usually ahead of qemu on features, so try that first */
create_tool = virFindFileInPath("kvm-img"); create_tool = virFindFileInPath("kvm-img");
...@@ -821,6 +824,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, ...@@ -821,6 +824,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
} }
cleanup: cleanup:
VIR_FREE(size);
VIR_FREE(create_tool); VIR_FREE(create_tool);
return ret; return ret;
...@@ -838,7 +842,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -838,7 +842,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags ATTRIBUTE_UNUSED)
{ {
int ret; int ret;
char size[100]; char *size;
const char *imgargv[4]; const char *imgargv[4];
if (inputvol) { if (inputvol) {
...@@ -867,7 +871,10 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -867,7 +871,10 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
} }
/* Size in MB - yes different units to qemu-img :-( */ /* 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[0] = virFindFileInPath("qcow-create");
imgargv[1] = size; imgargv[1] = size;
...@@ -876,6 +883,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -876,6 +883,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
ret = virStorageBackendCreateExecCommand(pool, vol, imgargv); ret = virStorageBackendCreateExecCommand(pool, vol, imgargv);
VIR_FREE(imgargv[0]); VIR_FREE(imgargv[0]);
VIR_FREE(size);
return ret; return ret;
} }
......
...@@ -381,7 +381,7 @@ virStorageBackendDiskPartTypeToCreate(virStoragePoolObjPtr pool) ...@@ -381,7 +381,7 @@ virStorageBackendDiskPartTypeToCreate(virStoragePoolObjPtr pool)
static int static int
virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool, virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
virStorageVolDefPtr vol, virStorageVolDefPtr vol,
char* partFormat) char** partFormat)
{ {
int i; int i;
if (pool->def->source.format == VIR_STORAGE_POOL_DISK_DOS) { if (pool->def->source.format == VIR_STORAGE_POOL_DISK_DOS) {
...@@ -402,7 +402,10 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool, ...@@ -402,7 +402,10 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
return -1; return -1;
} }
} }
sprintf(partFormat, "%s", partedFormat); if ((*partFormat = strdup(partedFormat)) == NULL) {
virReportOOMError();
return -1;
}
} else { } else {
/* create primary partition as long as it is possible /* create primary partition as long as it is possible
and after that check if an extended partition exists and after that check if an extended partition exists
...@@ -410,14 +413,21 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool, ...@@ -410,14 +413,21 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
/* XXX Only support one extended partition */ /* XXX Only support one extended partition */
switch (virStorageBackendDiskPartTypeToCreate(pool)) { switch (virStorageBackendDiskPartTypeToCreate(pool)) {
case VIR_STORAGE_VOL_DISK_TYPE_PRIMARY: case VIR_STORAGE_VOL_DISK_TYPE_PRIMARY:
sprintf(partFormat, "primary %s", partedFormat); if (virAsprintf(partFormat, "primary %s", partedFormat) < 0) {
virReportOOMError();
return -1;
}
break; break;
case VIR_STORAGE_VOL_DISK_TYPE_LOGICAL: case VIR_STORAGE_VOL_DISK_TYPE_LOGICAL:
/* make sure we have a extended partition */ /* make sure we have a extended partition */
for (i = 0; i < pool->volumes.count; i++) { for (i = 0; i < pool->volumes.count; i++) {
if (pool->volumes.objs[i]->target.format == if (pool->volumes.objs[i]->target.format ==
VIR_STORAGE_VOL_DISK_EXTENDED) { VIR_STORAGE_VOL_DISK_EXTENDED) {
sprintf(partFormat, "logical %s", partedFormat); if (virAsprintf(partFormat, "logical %s",
partedFormat) < 0) {
virReportOOMError();
return -1;
}
break; break;
} }
} }
...@@ -428,11 +438,16 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool, ...@@ -428,11 +438,16 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
} }
break; break;
default: default:
break; virStorageReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("unknown partition type"));
return -1;
} }
} }
} else { } else {
sprintf(partFormat, "primary"); if ((*partFormat = strdup("primary")) == NULL) {
virReportOOMError();
return -1;
}
} }
return 0; return 0;
} }
...@@ -538,16 +553,19 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -538,16 +553,19 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
virStoragePoolObjPtr pool, virStoragePoolObjPtr pool,
virStorageVolDefPtr vol) 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; unsigned long long startOffset = 0, endOffset = 0;
const char *cmdargv[] = { const char *cmdargv[] = {
PARTED, PARTED,
pool->def->source.devices[0].path, pool->def->source.devices[0].path,
"mkpart", "mkpart",
"--script", "--script",
partFormat, NULL /*partFormat*/,
start, NULL /*start*/,
end, NULL /*end*/,
NULL NULL
}; };
...@@ -558,23 +576,27 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -558,23 +576,27 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
return -1; return -1;
} }
if (virStorageBackendDiskPartFormat(pool, vol, partFormat) != 0) { if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0) {
return -1; return -1;
} }
cmdargv[4] = partFormat;
if (virStorageBackendDiskPartBoundries(pool, &startOffset, if (virStorageBackendDiskPartBoundries(pool, &startOffset,
&endOffset, &endOffset,
vol->capacity) != 0) { vol->capacity) != 0) {
return -1; goto cleanup;
} }
snprintf(start, sizeof(start)-1, "%lluB", startOffset); if (virAsprintf(&start, "%lluB", startOffset) < 0 ||
start[sizeof(start)-1] = '\0'; virAsprintf(&end, "%lluB", endOffset) < 0) {
snprintf(end, sizeof(end)-1, "%lluB", endOffset); virReportOOMError();
end[sizeof(end)-1] = '\0'; goto cleanup;
}
cmdargv[5] = start;
cmdargv[6] = end;
if (virRun(cmdargv, NULL) < 0) if (virRun(cmdargv, NULL) < 0)
return -1; goto cleanup;
/* wait for device node to show up */ /* wait for device node to show up */
virFileWaitForDevices(); virFileWaitForDevices();
...@@ -588,9 +610,15 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -588,9 +610,15 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
/* Fetch actual extent info, generate key */ /* Fetch actual extent info, generate key */
if (virStorageBackendDiskReadPartitions(pool, vol) < 0) 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 static int
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册