提交 bb4ec555 编写于 作者: M Matthew Booth 提交者: Daniel Veillard

Use virBuffer when building QEMU char dev command line

* src/qemu/qemu_conf.c: Update qemudBuildCommandLineChrDevStr to use a
  virBuffer
上级 8f67f644
...@@ -1502,84 +1502,66 @@ static int qemudBuildCommandLineChrDevTargetStr(virDomainChrDefPtr dev, ...@@ -1502,84 +1502,66 @@ static int qemudBuildCommandLineChrDevTargetStr(virDomainChrDefPtr dev,
return ret; return ret;
} }
/* This function outputs an all-in-one character device command line option */ static void qemudBuildCommandLineChrDevStr(virDomainChrDefPtr dev,
static int qemudBuildCommandLineChrDevStr(virDomainChrDefPtr dev, virBufferPtr buf)
char *buf,
int buflen)
{ {
switch (dev->type) { switch (dev->type) {
case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_NULL:
if (virStrcpy(buf, "null", buflen) == NULL) virBufferAddLit(buf, "null");
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_VC:
if (virStrcpy(buf, "vc", buflen) == NULL) virBufferAddLit(buf, "vc");
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_PTY:
if (virStrcpy(buf, "pty", buflen) == NULL) virBufferAddLit(buf, "pty");
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
if (snprintf(buf, buflen, "%s", virBufferStrcat(buf, dev->data.file.path, NULL);
dev->data.file.path) >= buflen)
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
if (snprintf(buf, buflen, "file:%s", virBufferVSprintf(buf, "file:%s", dev->data.file.path);
dev->data.file.path) >= buflen)
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_PIPE: case VIR_DOMAIN_CHR_TYPE_PIPE:
if (snprintf(buf, buflen, "pipe:%s", virBufferVSprintf(buf, "pipe:%s", dev->data.file.path);
dev->data.file.path) >= buflen)
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_STDIO: case VIR_DOMAIN_CHR_TYPE_STDIO:
if (virStrcpy(buf, "stdio", buflen) == NULL) virBufferAddLit(buf, "stdio");
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_UDP: case VIR_DOMAIN_CHR_TYPE_UDP:
if (snprintf(buf, buflen, "udp:%s:%s@%s:%s", virBufferVSprintf(buf, "udp:%s:%s@%s:%s",
dev->data.udp.connectHost, dev->data.udp.connectHost,
dev->data.udp.connectService, dev->data.udp.connectService,
dev->data.udp.bindHost, dev->data.udp.bindHost,
dev->data.udp.bindService) >= buflen) dev->data.udp.bindService);
return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
if (dev->data.tcp.protocol == VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET) { if (dev->data.tcp.protocol == VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET) {
if (snprintf(buf, buflen, "telnet:%s:%s%s", virBufferVSprintf(buf, "telnet:%s:%s%s",
dev->data.tcp.host, dev->data.tcp.host,
dev->data.tcp.service, dev->data.tcp.service,
dev->data.tcp.listen ? ",server,nowait" : "") >= buflen) dev->data.tcp.listen ? ",server,nowait" : "");
return -1;
} else { } else {
if (snprintf(buf, buflen, "tcp:%s:%s%s", virBufferVSprintf(buf, "tcp:%s:%s%s",
dev->data.tcp.host, dev->data.tcp.host,
dev->data.tcp.service, dev->data.tcp.service,
dev->data.tcp.listen ? ",server,nowait" : "") >= buflen) dev->data.tcp.listen ? ",server,nowait" : "");
return -1;
} }
break; break;
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
if (snprintf(buf, buflen, "unix:%s%s", virBufferVSprintf(buf, "unix:%s%s",
dev->data.nix.path, dev->data.nix.path,
dev->data.nix.listen ? ",server,nowait" : "") >= buflen) dev->data.nix.listen ? ",server,nowait" : "");
return -1;
break; break;
} }
return 0;
} }
#define QEMU_SERIAL_PARAM_ACCEPTED_CHARS \ #define QEMU_SERIAL_PARAM_ACCEPTED_CHARS \
...@@ -1867,13 +1849,14 @@ int qemudBuildCommandLine(virConnectPtr conn, ...@@ -1867,13 +1849,14 @@ int qemudBuildCommandLine(virConnectPtr conn,
ADD_ARG_LIT("-nographic"); ADD_ARG_LIT("-nographic");
if (monitor_chr) { if (monitor_chr) {
char buf[4096]; virBuffer buf = VIR_BUFFER_INITIALIZER;
if (qemudBuildCommandLineChrDevStr(monitor_chr, buf, sizeof(buf)) < 0) qemudBuildCommandLineChrDevStr(monitor_chr, &buf);
if (virBufferError(&buf))
goto error; goto error;
ADD_ARG_LIT("-monitor"); ADD_ARG_LIT("-monitor");
ADD_ARG_LIT(buf); ADD_ARG(virBufferContentAndReset(&buf));
} }
if (def->localtime) if (def->localtime)
...@@ -2153,14 +2136,15 @@ int qemudBuildCommandLine(virConnectPtr conn, ...@@ -2153,14 +2136,15 @@ int qemudBuildCommandLine(virConnectPtr conn,
ADD_ARG_LIT("none"); ADD_ARG_LIT("none");
} else { } else {
for (i = 0 ; i < def->nserials ; i++) { for (i = 0 ; i < def->nserials ; i++) {
char buf[4096]; virBuffer buf = VIR_BUFFER_INITIALIZER;
virDomainChrDefPtr serial = def->serials[i]; virDomainChrDefPtr serial = def->serials[i];
if (qemudBuildCommandLineChrDevStr(serial, buf, sizeof(buf)) < 0) qemudBuildCommandLineChrDevStr(serial, &buf);
if (virBufferError(&buf))
goto error; goto error;
ADD_ARG_LIT("-serial"); ADD_ARG_LIT("-serial");
ADD_ARG_LIT(buf); ADD_ARG(virBufferContentAndReset(&buf));
} }
} }
...@@ -2169,14 +2153,15 @@ int qemudBuildCommandLine(virConnectPtr conn, ...@@ -2169,14 +2153,15 @@ int qemudBuildCommandLine(virConnectPtr conn,
ADD_ARG_LIT("none"); ADD_ARG_LIT("none");
} else { } else {
for (i = 0 ; i < def->nparallels ; i++) { for (i = 0 ; i < def->nparallels ; i++) {
char buf[4096]; virBuffer buf = VIR_BUFFER_INITIALIZER;
virDomainChrDefPtr parallel = def->parallels[i]; virDomainChrDefPtr parallel = def->parallels[i];
if (qemudBuildCommandLineChrDevStr(parallel, buf, sizeof(buf)) < 0) qemudBuildCommandLineChrDevStr(parallel, &buf);
if (virBufferError(&buf))
goto error; goto error;
ADD_ARG_LIT("-parallel"); ADD_ARG_LIT("-parallel");
ADD_ARG_LIT(buf); ADD_ARG(virBufferContentAndReset(&buf));
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册