Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
684675c3
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
684675c3
编写于
4月 29, 2015
作者:
P
Peter Krempa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
conf: Extract code to filter domain list into a separate function
Separate the code to simplify future refactors.
上级
a5e89ae1
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
47 addition
and
35 deletion
+47
-35
src/conf/domain_conf.c
src/conf/domain_conf.c
+47
-35
未找到文件。
src/conf/domain_conf.c
浏览文件 @
684675c3
...
@@ -22965,43 +22965,19 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
...
@@ -22965,43 +22965,19 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
return ret;
return ret;
}
}
struct virDomainListData {
virConnectPtr conn;
virDomainPtr *domains;
virDomainObjListFilter filter;
unsigned int flags;
int ndomains;
bool error;
};
#define MATCH(FLAG) (data->flags & (FLAG))
#define MATCH(FLAG) (filter & (FLAG))
static void
static bool
virDomainListPopulate(void *payload,
virDomainObjMatchFilter(virDomainObjPtr vm,
const void *name ATTRIBUTE_UNUSED,
unsigned int filter)
void *opaque)
{
{
struct virDomainListData *data = opaque;
virDomainObjPtr vm = payload;
virDomainPtr dom;
if (data->error)
return;
virObjectLock(vm);
/* check if the domain matches the filter */
/* filter by the callback function (access control checks) */
if (data->filter != NULL &&
!data->filter(data->conn, vm->def))
goto cleanup;
/* filter by active state */
/* filter by active state */
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE) &&
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE) &&
!((MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE) &&
!((MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE) &&
virDomainObjIsActive(vm)) ||
virDomainObjIsActive(vm)) ||
(MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE) &&
(MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE) &&
!virDomainObjIsActive(vm))))
!virDomainObjIsActive(vm))))
goto cleanup
;
return false
;
/* filter by persistence */
/* filter by persistence */
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT) &&
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT) &&
...
@@ -23009,7 +22985,7 @@ virDomainListPopulate(void *payload,
...
@@ -23009,7 +22985,7 @@ virDomainListPopulate(void *payload,
vm->persistent) ||
vm->persistent) ||
(MATCH(VIR_CONNECT_LIST_DOMAINS_TRANSIENT) &&
(MATCH(VIR_CONNECT_LIST_DOMAINS_TRANSIENT) &&
!vm->persistent)))
!vm->persistent)))
goto cleanup
;
return false
;
/* filter by domain state */
/* filter by domain state */
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE)) {
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE)) {
...
@@ -23024,7 +23000,7 @@ virDomainListPopulate(void *payload,
...
@@ -23024,7 +23000,7 @@ virDomainListPopulate(void *payload,
(st != VIR_DOMAIN_RUNNING &&
(st != VIR_DOMAIN_RUNNING &&
st != VIR_DOMAIN_PAUSED &&
st != VIR_DOMAIN_PAUSED &&
st != VIR_DOMAIN_SHUTOFF))))
st != VIR_DOMAIN_SHUTOFF))))
goto cleanup
;
return false
;
}
}
/* filter by existence of managed save state */
/* filter by existence of managed save state */
...
@@ -23033,22 +23009,59 @@ virDomainListPopulate(void *payload,
...
@@ -23033,22 +23009,59 @@ virDomainListPopulate(void *payload,
vm->hasManagedSave) ||
vm->hasManagedSave) ||
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE) &&
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE) &&
!vm->hasManagedSave)))
!vm->hasManagedSave)))
goto cleanup
;
return false
;
/* filter by autostart option */
/* filter by autostart option */
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART) &&
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART) &&
!((MATCH(VIR_CONNECT_LIST_DOMAINS_AUTOSTART) && vm->autostart) ||
!((MATCH(VIR_CONNECT_LIST_DOMAINS_AUTOSTART) && vm->autostart) ||
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART) && !vm->autostart)))
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART) && !vm->autostart)))
goto cleanup
;
return false
;
/* filter by snapshot existence */
/* filter by snapshot existence */
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT)) {
if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT)) {
int nsnap = virDomainSnapshotObjListNum(vm->snapshots, NULL, 0);
int nsnap = virDomainSnapshotObjListNum(vm->snapshots, NULL, 0);
if (!((MATCH(VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT) && nsnap > 0) ||
if (!((MATCH(VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT) && nsnap > 0) ||
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT) && nsnap <= 0)))
(MATCH(VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT) && nsnap <= 0)))
goto cleanup
;
return false
;
}
}
return true;
}
#undef MATCH
struct virDomainListData {
virConnectPtr conn;
virDomainPtr *domains;
virDomainObjListFilter filter;
unsigned int flags;
int ndomains;
bool error;
};
static void
virDomainListPopulate(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
{
struct virDomainListData *data = opaque;
virDomainObjPtr vm = payload;
virDomainPtr dom;
if (data->error)
return;
virObjectLock(vm);
/* check if the domain matches the filter */
/* filter by the callback function (access control checks) */
if (data->filter != NULL &&
!data->filter(data->conn, vm->def))
goto cleanup;
if (!virDomainObjMatchFilter(vm, data->flags))
goto cleanup;
/* just count the machines */
/* just count the machines */
if (!data->domains) {
if (!data->domains) {
data->ndomains++;
data->ndomains++;
...
@@ -23068,7 +23081,6 @@ virDomainListPopulate(void *payload,
...
@@ -23068,7 +23081,6 @@ virDomainListPopulate(void *payload,
virObjectUnlock(vm);
virObjectUnlock(vm);
return;
return;
}
}
#undef MATCH
int
int
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录