
On Thu, Jun 06, 2013 at 14:30:03 +0200, Michal Privoznik wrote:
The chardev alias assignment is going to be needed in a separate places, so it should be moved into a separate function rather than copying code randomly around. --- src/qemu/qemu_command.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++--- src/qemu/qemu_command.h | 3 +++ 2 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c4a162a..39b9d24 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -891,6 +891,64 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller) return 0; }
+int +qemuAssignDeviceChrAlias(virDomainDefPtr def, + virDomainChrDefPtr chr, + size_t idx)
Since you want to pass -1 as idx, you should declare it as signed
+{ + virDomainChrDefPtr **arrPtr; + size_t *cntPtr; + const char *prefix; + + if (virDomainChrGetDomainPtrs(def, chr, &arrPtr, &cntPtr) < 0) + return -1; + + switch ((enum virDomainChrDeviceType) chr->deviceType) { + case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL: + prefix = "parallel"; + break; + + case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL: + prefix = "serial"; + break; + + case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE: + prefix = "console"; + break; + + case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL: + prefix = "channel"; + break; + + default: + virReportError(VIR_ERR_OPERATION_INVALID, + _("Unsupported device type '%d'"), + chr->deviceType); + return -1; + } + + if (idx == -1) { + size_t i; + idx = 0; + for (i = 0; i < *cntPtr; i++) { + int thisidx; + if ((thisidx = qemuDomainDeviceAliasIndex(&(*arrPtr)[i]->info, prefix)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to determine device index for character device")); + return -1; + } + if (thisidx >= idx) + idx = thisidx + 1; + } + } + + if (virAsprintf(&chr->info.alias, "%s%zu", prefix, idx) < 0) {
and update %zu to be signed, too.
+ virReportOOMError(); + return -1; + } + + return 0; +}
ACK with the change. Jirka