Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
69afdf14
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,发现更多精彩内容 >>
提交
69afdf14
编写于
3月 30, 2011
作者:
J
Jiri Denemark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qemu: Rewrite LOOKUP_PTYS macro into a function
The macro is huge and gives us nothing but headache when maintaining it.
上级
a4e37ff1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
61 addition
and
41 deletion
+61
-41
src/qemu/qemu_process.c
src/qemu/qemu_process.c
+61
-41
未找到文件。
src/qemu/qemu_process.c
浏览文件 @
69afdf14
...
...
@@ -894,52 +894,72 @@ qemuProcessExtractTTYPath(const char *haystack,
return
1
;
}
static
int
qemuProcessLookupPTYs
(
virDomainChrDefPtr
*
devices
,
int
count
,
const
char
*
prefix
,
virHashTablePtr
paths
)
{
int
i
;
for
(
i
=
0
;
i
<
count
;
i
++
)
{
virDomainChrDefPtr
chr
=
devices
[
i
];
if
(
chr
->
source
.
type
==
VIR_DOMAIN_CHR_TYPE_PTY
)
{
char
id
[
16
];
const
char
*
path
;
if
(
snprintf
(
id
,
sizeof
(
id
),
"%s%d"
,
prefix
,
i
)
>=
sizeof
(
id
))
return
-
1
;
path
=
(
const
char
*
)
virHashLookup
(
paths
,
id
);
if
(
path
==
NULL
)
{
if
(
chr
->
source
.
data
.
file
.
path
==
NULL
)
{
/* neither the log output nor 'info chardev' had a
* pty path for this chardev, report an error
*/
qemuReportError
(
VIR_ERR_INTERNAL_ERROR
,
_
(
"no assigned pty for device %s"
),
id
);
return
-
1
;
}
else
{
/* 'info chardev' had no pty path for this chardev,
* but the log output had, so we're fine
*/
continue
;
}
}
VIR_FREE
(
chr
->
source
.
data
.
file
.
path
);
chr
->
source
.
data
.
file
.
path
=
strdup
(
path
);
if
(
chr
->
source
.
data
.
file
.
path
==
NULL
)
{
virReportOOMError
();
return
-
1
;
}
}
}
return
0
;
}
static
int
qemuProcessFindCharDevicePTYsMonitor
(
virDomainObjPtr
vm
,
virHashTablePtr
paths
)
{
int
i
;
if
(
qemuProcessLookupPTYs
(
vm
->
def
->
serials
,
vm
->
def
->
nserials
,
"serial"
,
paths
)
<
0
)
return
-
1
;
if
(
qemuProcessLookupPTYs
(
vm
->
def
->
parallels
,
vm
->
def
->
nparallels
,
"parallel"
,
paths
)
<
0
)
return
-
1
;
#define LOOKUP_PTYS(array, arraylen, idprefix) \
for (i = 0 ; i < (arraylen) ; i++) { \
virDomainChrDefPtr chr = (array)[i]; \
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { \
char id[16]; \
\
if (snprintf(id, sizeof(id), idprefix "%i", i) >= sizeof(id)) \
return -1; \
\
const char *path = (const char *) virHashLookup(paths, id); \
if (path == NULL) { \
if (chr->source.data.file.path == NULL) { \
/* neither the log output nor 'info chardev' had a */
\
/* pty path for this chardev, report an error */
\
qemuReportError(VIR_ERR_INTERNAL_ERROR, \
_("no assigned pty for device %s"), id); \
return -1; \
} else { \
/* 'info chardev' had no pty path for this chardev, */
\
/* but the log output had, so we're fine */
\
continue; \
} \
} \
\
VIR_FREE(chr->source.data.file.path); \
chr->source.data.file.path = strdup(path); \
\
if (chr->source.data.file.path == NULL) { \
virReportOOMError(); \
return -1; \
} \
} \
}
LOOKUP_PTYS
(
vm
->
def
->
serials
,
vm
->
def
->
nserials
,
"serial"
);
LOOKUP_PTYS
(
vm
->
def
->
parallels
,
vm
->
def
->
nparallels
,
"parallel"
);
LOOKUP_PTYS
(
vm
->
def
->
channels
,
vm
->
def
->
nchannels
,
"channel"
);
if
(
vm
->
def
->
console
)
LOOKUP_PTYS
(
&
vm
->
def
->
console
,
1
,
"console"
);
#undef LOOKUP_PTYS
if
(
qemuProcessLookupPTYs
(
vm
->
def
->
channels
,
vm
->
def
->
nchannels
,
"channel"
,
paths
)
<
0
)
return
-
1
;
if
(
vm
->
def
->
console
&&
qemuProcessLookupPTYs
(
&
vm
->
def
->
console
,
1
,
"console"
,
paths
)
<
0
)
return
-
1
;
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录