}
-int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths)
+int
+qemuMonitorGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr *retinfo)
{
int ret;
- VIR_DEBUG("mon=%p",
- mon);
+ virHashTablePtr info = NULL;
+
+ VIR_DEBUG("mon=%p retinfo=%p", mon, retinfo);
if (!mon) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("monitor must not be NULL"));
- return -1;
+ goto error;
}
+ if (!(info = virHashCreate(10, virHashValueFree)))
+ goto error;
+
if (mon->json)
- ret = qemuMonitorJSONGetPtyPaths(mon, paths);
+ ret = qemuMonitorJSONGetChardevInfo(mon, info);
else
- ret = qemuMonitorTextGetPtyPaths(mon, paths);
- return ret;
+ ret = qemuMonitorTextGetChardevInfo(mon, info);
+
+ if (ret < 0)
+ goto error;
+
+ *retinfo = info;
+ return 0;
+
+ error:
+ virHashFree(info);
+ *retinfo = NULL;
+ return -1;
}
int qemuMonitorQueryRxFilter(qemuMonitorPtr mon, const char *alias,
virNetDevRxFilterPtr *filter);
-int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths);
+int qemuMonitorGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr *retinfo);
int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
const char *bus,
* ]}
*
*/
-static int qemuMonitorJSONExtractPtyPaths(virJSONValuePtr reply,
- virHashTablePtr paths)
+static int
+qemuMonitorJSONExtractChardevInfo(virJSONValuePtr reply,
+ virHashTablePtr info)
{
virJSONValuePtr data;
int ret = -1;
if (VIR_STRDUP(path, type + strlen("pty:")) < 0)
goto cleanup;
- if (virHashAddEntry(paths, id, path) < 0) {
+ if (virHashAddEntry(info, id, path) < 0) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("failed to save chardev path '%s'"), path);
VIR_FREE(path);
return ret;
}
-int qemuMonitorJSONGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths)
+
+int
+qemuMonitorJSONGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr info)
{
int ret;
ret = qemuMonitorJSONCheckError(cmd, reply);
if (ret == 0)
- ret = qemuMonitorJSONExtractPtyPaths(reply, paths);
+ ret = qemuMonitorJSONExtractChardevInfo(reply, info);
virJSONValueFree(cmd);
virJSONValueFree(reply);
int qemuMonitorJSONQueryRxFilter(qemuMonitorPtr mon, const char *alias,
virNetDevRxFilterPtr *filter);
-int qemuMonitorJSONGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths);
+int qemuMonitorJSONGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr info);
int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon,
const char *bus,
* '/dev/pty/7'. The hash will contain only a single value.
*/
-int qemuMonitorTextGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths)
+int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr info)
{
char *reply = NULL;
int ret = -1;
if (VIR_STRDUP(path, needle + strlen(NEEDLE)) < 0)
goto cleanup;
- if (virHashAddEntry(paths, id, path) < 0) {
+ if (virHashAddEntry(info, id, path) < 0) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("failed to save chardev path '%s'"),
path);
int qemuMonitorTextRemoveNetdev(qemuMonitorPtr mon,
const char *alias);
-int qemuMonitorTextGetPtyPaths(qemuMonitorPtr mon,
- virHashTablePtr paths);
+int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon,
+ virHashTablePtr info);
int qemuMonitorTextAttachPCIDiskController(qemuMonitorPtr mon,
const char *bus,
virQEMUCapsPtr qemuCaps,
virDomainChrDefPtr *devices,
int count,
- virHashTablePtr paths)
+ virHashTablePtr info)
{
size_t i;
return -1;
}
- path = (const char *) virHashLookup(paths, id);
+ path = (const char *) virHashLookup(info, id);
if (path == NULL) {
if (chr->source.data.file.path == NULL) {
/* neither the log output nor 'info chardev' had a
static int
qemuProcessFindCharDevicePTYsMonitor(virDomainObjPtr vm,
virQEMUCapsPtr qemuCaps,
- virHashTablePtr paths)
+ virHashTablePtr info)
{
size_t i = 0;
if (qemuProcessLookupPTYs(vm->def, qemuCaps,
vm->def->serials, vm->def->nserials,
- paths) < 0)
+ info) < 0)
return -1;
if (qemuProcessLookupPTYs(vm->def, qemuCaps,
vm->def->parallels, vm->def->nparallels,
- paths) < 0)
+ info) < 0)
return -1;
if (qemuProcessLookupPTYs(vm->def, qemuCaps,
vm->def->channels, vm->def->nchannels,
- paths) < 0)
+ info) < 0)
return -1;
/* For historical reasons, console[0] can be just an alias
* for serial[0]. That's why we need to update it as well. */
if (qemuProcessLookupPTYs(vm->def, qemuCaps,
vm->def->consoles + i, vm->def->nconsoles - i,
- paths) < 0)
+ info) < 0)
return -1;
return 0;
size_t buf_size = 4096; /* Plenty of space to get startup greeting */
int logfd = -1;
int ret = -1;
- virHashTablePtr paths = NULL;
+ virHashTablePtr info = NULL;
qemuDomainObjPrivatePtr priv;
if (pos != -1 &&
* reliable if it's available.
* Note that the monitor itself can be on a pty, so we still need to try the
* log output method. */
- paths = virHashCreate(0, virHashValueFree);
- if (paths == NULL)
- goto cleanup;
-
priv = vm->privateData;
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
goto cleanup;
- ret = qemuMonitorGetPtyPaths(priv->mon, paths);
+ ret = qemuMonitorGetChardevInfo(priv->mon, &info);
qemuDomainObjExitMonitor(driver, vm);
- VIR_DEBUG("qemuMonitorGetPtyPaths returned %i", ret);
+ VIR_DEBUG("qemuMonitorGetChardevInfo returned %i", ret);
if (ret == 0)
- ret = qemuProcessFindCharDevicePTYsMonitor(vm, qemuCaps, paths);
+ ret = qemuProcessFindCharDevicePTYsMonitor(vm, qemuCaps, info);
cleanup:
- virHashFree(paths);
+ virHashFree(info);
if (pos != -1 && kill(vm->pid, 0) == -1 && errno == ESRCH) {
int len;
}
static int
-testQemuMonitorJSONqemuMonitorJSONGetPtyPaths(const void *data)
+testQemuMonitorJSONqemuMonitorJSONGetChardevInfo(const void *data)
{
virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, xmlopt);
int ret = -1;
- virHashTablePtr paths = NULL, expectedPaths = NULL;
+ virHashTablePtr info = NULL, expectedInfo = NULL;
if (!test)
return -1;
- if (!(paths = virHashCreate(32, (virHashDataFree) free)) ||
- !(expectedPaths = virHashCreate(32, NULL)))
+ if (!(info = virHashCreate(32, (virHashDataFree) free)) ||
+ !(expectedInfo = virHashCreate(32, NULL)))
goto cleanup;
- if (virHashAddEntry(expectedPaths, "charserial1", (void *) "/dev/pts/21") < 0 ||
- virHashAddEntry(expectedPaths, "charserial0", (void *) "/dev/pts/20") < 0) {
+ if (virHashAddEntry(expectedInfo, "charserial1", (void *) "/dev/pts/21") < 0 ||
+ virHashAddEntry(expectedInfo, "charserial0", (void *) "/dev/pts/20") < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- "Unable to create expectedPaths hash table");
+ "Unable to create expectedInfo hash table");
goto cleanup;
}
"}") < 0)
goto cleanup;
- if (qemuMonitorJSONGetPtyPaths(qemuMonitorTestGetMonitor(test),
- paths) < 0)
+ if (qemuMonitorJSONGetChardevInfo(qemuMonitorTestGetMonitor(test),
+ info) < 0)
goto cleanup;
- if (!virHashEqual(paths, expectedPaths, testHashEqualString)) {
+ if (!virHashEqual(info, expectedInfo, testHashEqualString)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
"Hashtable is different to the expected one");
goto cleanup;
ret = 0;
cleanup:
- virHashFree(paths);
- virHashFree(expectedPaths);
+ virHashFree(info);
+ virHashFree(expectedInfo);
qemuMonitorTestFree(test);
return ret;
}
DO_TEST(qemuMonitorJSONGetMigrationCacheSize);
DO_TEST(qemuMonitorJSONGetMigrationStatus);
DO_TEST(qemuMonitorJSONGetSpiceMigrationStatus);
- DO_TEST(qemuMonitorJSONGetPtyPaths);
+ DO_TEST(qemuMonitorJSONGetChardevInfo);
DO_TEST(qemuMonitorJSONSetBlockIoThrottle);
DO_TEST(qemuMonitorJSONGetTargetArch);
DO_TEST(qemuMonitorJSONGetMigrationCapability);