Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
88710cee
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
88710cee
编写于
6月 03, 2015
作者:
J
Ján Tomko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move qemuMonitorFindObjectPath to qemu_monitor_json
This function is specific to the JSON monitor.
上级
ccb05762
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
78 addition
and
74 deletion
+78
-74
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.c
+2
-74
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.c
+72
-0
src/qemu/qemu_monitor_json.h
src/qemu/qemu_monitor_json.h
+4
-0
未找到文件。
src/qemu/qemu_monitor.c
浏览文件 @
88710cee
...
...
@@ -1068,78 +1068,6 @@ qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
}
/**
* Search the qom objects by it's known name. The name is compared against
* filed 'type' formatted as 'link<%name>'.
*
* This procedure will be call recursively until found or the qom-list is
* exhausted.
*
* Returns:
*
* 0 - Found
* -1 - Error bail out
* -2 - Not found
*
* NOTE: This assumes we have already called qemuDomainObjEnterMonitor()
*/
static
int
qemuMonitorFindObjectPath
(
qemuMonitorPtr
mon
,
const
char
*
curpath
,
const
char
*
name
,
char
**
path
)
{
ssize_t
i
,
npaths
=
0
;
int
ret
=
-
2
;
char
*
nextpath
=
NULL
;
char
*
type
=
NULL
;
qemuMonitorJSONListPathPtr
*
paths
=
NULL
;
if
(
virAsprintf
(
&
type
,
"link<%s>"
,
name
)
<
0
)
return
-
1
;
VIR_DEBUG
(
"Searching for '%s' Object Path starting at '%s'"
,
type
,
curpath
);
npaths
=
qemuMonitorJSONGetObjectListPaths
(
mon
,
curpath
,
&
paths
);
if
(
npaths
<
0
)
goto
cleanup
;
for
(
i
=
0
;
i
<
npaths
&&
ret
==
-
2
;
i
++
)
{
if
(
STREQ_NULLABLE
(
paths
[
i
]
->
type
,
type
))
{
VIR_DEBUG
(
"Path to '%s' is '%s/%s'"
,
type
,
curpath
,
paths
[
i
]
->
name
);
ret
=
0
;
if
(
virAsprintf
(
path
,
"%s/%s"
,
curpath
,
paths
[
i
]
->
name
)
<
0
)
{
*
path
=
NULL
;
ret
=
-
1
;
}
goto
cleanup
;
}
/* Type entries that begin with "child<" are a branch that can be
* traversed looking for more entries
*/
if
(
paths
[
i
]
->
type
&&
STRPREFIX
(
paths
[
i
]
->
type
,
"child<"
))
{
if
(
virAsprintf
(
&
nextpath
,
"%s/%s"
,
curpath
,
paths
[
i
]
->
name
)
<
0
)
{
ret
=
-
1
;
goto
cleanup
;
}
ret
=
qemuMonitorFindObjectPath
(
mon
,
nextpath
,
name
,
path
);
VIR_FREE
(
nextpath
);
}
}
cleanup:
for
(
i
=
0
;
i
<
npaths
;
i
++
)
qemuMonitorJSONListPathFree
(
paths
[
i
]);
VIR_FREE
(
paths
);
VIR_FREE
(
nextpath
);
VIR_FREE
(
type
);
return
ret
;
}
/**
* Search the qom objects for the balloon driver object by it's known name
* of "virtio-balloon-pci". The entry for the driver will be found by using
...
...
@@ -1183,7 +1111,7 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
return
-
1
;
}
if
(
qemuMonitorFindObjectPath
(
mon
,
curpath
,
"virtio-balloon-pci"
,
&
path
)
<
0
)
if
(
qemuMonitor
JSON
FindObjectPath
(
mon
,
curpath
,
"virtio-balloon-pci"
,
&
path
)
<
0
)
return
-
1
;
nprops
=
qemuMonitorJSONGetObjectListPaths
(
mon
,
path
,
&
bprops
);
...
...
@@ -1232,7 +1160,7 @@ qemuMonitorUpdateVideoMemorySize(qemuMonitorPtr mon,
QEMU_CHECK_MONITOR
(
mon
);
if
(
mon
->
json
)
{
ret
=
qemuMonitorFindObjectPath
(
mon
,
"/"
,
videoName
,
&
path
);
ret
=
qemuMonitor
JSON
FindObjectPath
(
mon
,
"/"
,
videoName
,
&
path
);
if
(
ret
<
0
)
{
if
(
ret
==
-
2
)
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
...
...
src/qemu/qemu_monitor_json.c
浏览文件 @
88710cee
...
...
@@ -6642,3 +6642,75 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
virJSONValueFree
(
reply
);
return
ret
;
}
/**
* Search the qom objects by it's known name. The name is compared against
* filed 'type' formatted as 'link<%name>'.
*
* This procedure will be call recursively until found or the qom-list is
* exhausted.
*
* Returns:
*
* 0 - Found
* -1 - Error bail out
* -2 - Not found
*
* NOTE: This assumes we have already called qemuDomainObjEnterMonitor()
*/
int
qemuMonitorJSONFindObjectPath
(
qemuMonitorPtr
mon
,
const
char
*
curpath
,
const
char
*
name
,
char
**
path
)
{
ssize_t
i
,
npaths
=
0
;
int
ret
=
-
2
;
char
*
nextpath
=
NULL
;
char
*
type
=
NULL
;
qemuMonitorJSONListPathPtr
*
paths
=
NULL
;
if
(
virAsprintf
(
&
type
,
"link<%s>"
,
name
)
<
0
)
return
-
1
;
VIR_DEBUG
(
"Searching for '%s' Object Path starting at '%s'"
,
type
,
curpath
);
npaths
=
qemuMonitorJSONGetObjectListPaths
(
mon
,
curpath
,
&
paths
);
if
(
npaths
<
0
)
goto
cleanup
;
for
(
i
=
0
;
i
<
npaths
&&
ret
==
-
2
;
i
++
)
{
if
(
STREQ_NULLABLE
(
paths
[
i
]
->
type
,
type
))
{
VIR_DEBUG
(
"Path to '%s' is '%s/%s'"
,
type
,
curpath
,
paths
[
i
]
->
name
);
ret
=
0
;
if
(
virAsprintf
(
path
,
"%s/%s"
,
curpath
,
paths
[
i
]
->
name
)
<
0
)
{
*
path
=
NULL
;
ret
=
-
1
;
}
goto
cleanup
;
}
/* Type entries that begin with "child<" are a branch that can be
* traversed looking for more entries
*/
if
(
paths
[
i
]
->
type
&&
STRPREFIX
(
paths
[
i
]
->
type
,
"child<"
))
{
if
(
virAsprintf
(
&
nextpath
,
"%s/%s"
,
curpath
,
paths
[
i
]
->
name
)
<
0
)
{
ret
=
-
1
;
goto
cleanup
;
}
ret
=
qemuMonitorJSONFindObjectPath
(
mon
,
nextpath
,
name
,
path
);
VIR_FREE
(
nextpath
);
}
}
cleanup:
for
(
i
=
0
;
i
<
npaths
;
i
++
)
qemuMonitorJSONListPathFree
(
paths
[
i
]);
VIR_FREE
(
paths
);
VIR_FREE
(
nextpath
);
VIR_FREE
(
type
);
return
ret
;
}
src/qemu/qemu_monitor_json.h
浏览文件 @
88710cee
...
...
@@ -482,4 +482,8 @@ int qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
virHashTablePtr
info
)
ATTRIBUTE_NONNULL
(
1
)
ATTRIBUTE_NONNULL
(
2
);
int
qemuMonitorJSONFindObjectPath
(
qemuMonitorPtr
mon
,
const
char
*
curpath
,
const
char
*
name
,
char
**
path
);
#endif
/* QEMU_MONITOR_JSON_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录