Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
895d0fdf
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看板
提交
895d0fdf
编写于
5月 29, 2008
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Convert to use new memory allocation APIs
上级
e8a0db81
变更
11
展开全部
隐藏空白更改
内联
并排
Showing
11 changed file
with
435 addition
and
416 deletion
+435
-416
ChangeLog
ChangeLog
+7
-0
src/conf.c
src/conf.c
+2
-3
src/conf.h
src/conf.h
+10
-8
src/qemu_conf.c
src/qemu_conf.c
+67
-63
src/qemu_driver.c
src/qemu_driver.c
+53
-61
src/test.c
src/test.c
+48
-46
src/util.c
src/util.c
+3
-8
src/xend_internal.c
src/xend_internal.c
+61
-62
src/xm_internal.c
src/xm_internal.c
+121
-105
src/xml.c
src/xml.c
+50
-50
tests/virshtest.c
tests/virshtest.c
+13
-10
未找到文件。
ChangeLog
浏览文件 @
895d0fdf
Thu May 29 15:17:00 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/conf.c, src/conf.h, src/qemu_conf.c, src/qemu_driver.c,
src/test.c, src/util.c, src/xend_internal.c, src/xm_internal.c,
src/xml.c, tests/virshtest.c: Switch over to using new memory
allocation APIs.
Thu May 29 14:46:00 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/memory.h, src/memory.c, tests/testutils.c: Pass allocation
...
...
src/conf.c
浏览文件 @
895d0fdf
...
...
@@ -105,7 +105,6 @@ virConfError(virConfPtr conf ATTRIBUTE_UNUSED,
* Structures allocations and deallocations *
* *
************************************************************************/
static
void
virConfFreeValue
(
virConfValuePtr
val
);
/**
* virConfFreeList:
...
...
@@ -132,8 +131,8 @@ virConfFreeList(virConfValuePtr list)
*
* Free a value
*/
static
void
virConfFreeValue
(
virConfValuePtr
val
)
void
__
virConfFreeValue
(
virConfValuePtr
val
)
{
if
(
val
==
NULL
)
return
;
...
...
src/conf.h
浏览文件 @
895d0fdf
...
...
@@ -70,6 +70,7 @@ virConfPtr __virConfReadFile (const char *filename);
virConfPtr
__virConfReadMem
(
const
char
*
memory
,
int
len
);
int
__virConfFree
(
virConfPtr
conf
);
void
__virConfFreeValue
(
virConfValuePtr
val
);
virConfValuePtr
__virConfGetValue
(
virConfPtr
conf
,
const
char
*
setting
);
...
...
@@ -82,14 +83,15 @@ int __virConfWriteMem (char *memory,
int
*
len
,
virConfPtr
conf
);
#define virConfNew() (__virConfNew())
#define virConfReadFile(f) (__virConfReadFile((f)))
#define virConfReadMem(m,l) (__virConfReadMem((m),(l)))
#define virConfFree(c) (__virConfFree((c)))
#define virConfGetValue(c,s) (__virConfGetValue((c),(s)))
#define virConfSetValue(c,s,v) (__virConfSetValue((c),(s),(v)))
#define virConfWriteFile(f,c) (__virConfWriteFile((f),(c)))
#define virConfWriteMem(m,l,c) (__virConfWriteMem((m),(l),(c)))
#define virConfNew() __virConfNew()
#define virConfReadFile(f) __virConfReadFile((f))
#define virConfReadMem(m,l) __virConfReadMem((m),(l))
#define virConfFree(c) __virConfFree((c))
#define virConfFreeValue(v) __virConfFreeValue((v))
#define virConfGetValue(c,s) __virConfGetValue((c),(s))
#define virConfSetValue(c,s,v) __virConfSetValue((c),(s),(v))
#define virConfWriteFile(f,c) __virConfWriteFile((f),(c))
#define virConfWriteMem(m,l,c) __virConfWriteMem((m),(l),(c))
#ifdef __cplusplus
}
...
...
src/qemu_conf.c
浏览文件 @
895d0fdf
...
...
@@ -121,7 +121,7 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
p
=
virConfGetValue
(
conf
,
"vnc_tls_x509_cert_dir"
);
CHECK_TYPE
(
"vnc_tls_x509_cert_dir"
,
VIR_CONF_STRING
);
if
(
p
&&
p
->
str
)
{
free
(
driver
->
vncTLSx509certdir
);
VIR_FREE
(
driver
->
vncTLSx509certdir
);
if
(
!
(
driver
->
vncTLSx509certdir
=
strdup
(
p
->
str
)))
{
qemudReportError
(
NULL
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate vncTLSx509certdir"
));
...
...
@@ -219,42 +219,42 @@ void qemudFreeVMDef(struct qemud_vm_def *def) {
while
(
disk
)
{
struct
qemud_vm_disk_def
*
prev
=
disk
;
disk
=
disk
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
while
(
net
)
{
struct
qemud_vm_net_def
*
prev
=
net
;
net
=
net
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
while
(
input
)
{
struct
qemud_vm_input_def
*
prev
=
input
;
input
=
input
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
while
(
serial
)
{
struct
qemud_vm_chr_def
*
prev
=
serial
;
serial
=
serial
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
while
(
parallel
)
{
struct
qemud_vm_chr_def
*
prev
=
parallel
;
parallel
=
parallel
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
while
(
sound
)
{
struct
qemud_vm_sound_def
*
prev
=
sound
;
sound
=
sound
->
next
;
free
(
prev
);
VIR_FREE
(
prev
);
}
xmlFree
(
def
->
keymap
);
free
(
def
);
VIR_FREE
(
def
);
}
void
qemudFreeVM
(
struct
qemud_vm
*
vm
)
{
qemudFreeVMDef
(
vm
->
def
);
if
(
vm
->
newDef
)
qemudFreeVMDef
(
vm
->
newDef
);
free
(
vm
);
VIR_FREE
(
vm
);
}
...
...
@@ -1417,8 +1417,8 @@ static int qemudParseCharXMLDevices(virConnectPtr conn,
}
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_chr_def
*
chr
=
calloc
(
1
,
sizeof
(
*
chr
))
;
if
(
!
chr
)
{
struct
qemud_vm_chr_def
*
chr
;
if
(
VIR_ALLOC
(
chr
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for char device"
));
...
...
@@ -1426,7 +1426,7 @@ static int qemudParseCharXMLDevices(virConnectPtr conn,
}
if
(
qemudParseCharXML
(
conn
,
chr
,
i
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
chr
);
VIR_FREE
(
chr
);
goto
cleanup
;
}
if
(
ndevs
)
...
...
@@ -1619,7 +1619,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
int
i
;
struct
qemud_vm_def
*
def
;
if
(
!
(
def
=
calloc
(
1
,
sizeof
(
*
def
)))
)
{
if
(
VIR_ALLOC
(
def
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for xmlXPathContext"
));
return
NULL
;
...
...
@@ -1659,8 +1659,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
"%s"
,
_
(
"invalid domain type attribute"
));
goto
error
;
}
free
(
prop
);
prop
=
NULL
;
VIR_FREE
(
prop
);
/* Extract domain name */
...
...
@@ -2032,14 +2031,14 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_disk_def
*
disk
=
calloc
(
1
,
sizeof
(
*
disk
))
;
if
(
!
disk
)
{
struct
qemud_vm_disk_def
*
disk
;
if
(
VIR_ALLOC
(
disk
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for disk string"
));
goto
error
;
}
if
(
qemudParseDiskXML
(
conn
,
disk
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
disk
);
VIR_FREE
(
disk
);
goto
error
;
}
def
->
ndisks
++
;
...
...
@@ -2082,8 +2081,8 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
obj
=
xmlXPathEval
(
BAD_CAST
"/domain/devices/console"
,
ctxt
);
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
struct
qemud_vm_chr_def
*
chr
=
calloc
(
1
,
sizeof
(
*
chr
))
;
if
(
!
chr
)
{
struct
qemud_vm_chr_def
*
chr
;
if
(
VIR_ALLOC
(
chr
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for char device"
));
...
...
@@ -2091,7 +2090,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
}
if
(
qemudParseCharXML
(
conn
,
chr
,
0
,
obj
->
nodesetval
->
nodeTab
[
0
])
<
0
)
{
free
(
chr
);
VIR_FREE
(
chr
);
goto
error
;
}
def
->
nserials
=
1
;
...
...
@@ -2107,14 +2106,14 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
struct
qemud_vm_net_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_net_def
*
net
=
calloc
(
1
,
sizeof
(
*
net
))
;
if
(
!
net
)
{
struct
qemud_vm_net_def
*
net
;
if
(
VIR_ALLOC
(
net
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for net string"
));
goto
error
;
}
if
(
qemudParseInterfaceXML
(
conn
,
net
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
net
);
VIR_FREE
(
net
);
goto
error
;
}
def
->
nnets
++
;
...
...
@@ -2135,20 +2134,20 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
struct
qemud_vm_input_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_input_def
*
input
=
calloc
(
1
,
sizeof
(
*
input
))
;
if
(
!
input
)
{
struct
qemud_vm_input_def
*
input
;
if
(
VIR_ALLOC
(
input
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for input string"
));
goto
error
;
}
if
(
qemudParseInputXML
(
conn
,
def
,
input
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
input
);
VIR_FREE
(
input
);
goto
error
;
}
/* Mouse + PS/2 is implicit with graphics, so don't store it */
if
(
input
->
bus
==
QEMU_INPUT_BUS_PS2
&&
input
->
type
==
QEMU_INPUT_TYPE_MOUSE
)
{
free
(
input
);
VIR_FREE
(
input
);
continue
;
}
def
->
ninputs
++
;
...
...
@@ -2170,17 +2169,17 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
struct
qemud_vm_sound_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_sound_def
*
sound
=
calloc
(
1
,
sizeof
(
*
sound
))
;
struct
qemud_vm_sound_def
*
sound
;
struct
qemud_vm_sound_def
*
check
=
def
->
sounds
;
int
collision
=
0
;
if
(
!
sound
)
{
if
(
VIR_ALLOC
(
sound
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for sound dev"
));
goto
error
;
}
if
(
qemudParseSoundXML
(
conn
,
sound
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
sound
);
VIR_FREE
(
sound
);
goto
error
;
}
...
...
@@ -2193,7 +2192,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
check
=
check
->
next
;
}
if
(
collision
)
{
free
(
sound
);
VIR_FREE
(
sound
);
continue
;
}
...
...
@@ -2222,8 +2221,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
}
if
(
!
hasPS2mouse
)
{
input
=
calloc
(
1
,
sizeof
(
*
input
));
if
(
!
input
)
{
if
(
VIR_ALLOC
(
input
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for input string"
));
goto
error
;
...
...
@@ -2241,7 +2239,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
return
def
;
error:
free
(
prop
);
VIR_FREE
(
prop
);
xmlXPathFreeObject
(
obj
);
xmlXPathFreeContext
(
ctxt
);
qemudFreeVMDef
(
def
);
...
...
@@ -2263,7 +2261,6 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
char
*
retval
=
NULL
;
int
err
;
int
tapfd
=
-
1
;
int
*
tapfds
;
if
(
net
->
type
==
QEMUD_NET_NETWORK
)
{
if
(
!
(
network
=
qemudFindNetworkByName
(
driver
,
net
->
dst
.
network
.
name
)))
{
...
...
@@ -2320,10 +2317,9 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
if
(
!
(
retval
=
strdup
(
tapfdstr
)))
goto
no_memory
;
if
(
!
(
tapfds
=
realloc
(
vm
->
tapfds
,
sizeof
(
*
tapfds
)
*
(
vm
->
ntapfds
+
2
)))
)
if
(
VIR_ALLOC_N
(
vm
->
tapfds
,
vm
->
ntapfds
+
2
)
<
0
)
goto
no_memory
;
vm
->
tapfds
=
tapfds
;
vm
->
tapfds
[
vm
->
ntapfds
++
]
=
tapfd
;
vm
->
tapfds
[
vm
->
ntapfds
]
=
-
1
;
...
...
@@ -2333,7 +2329,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for tapfds string"
));
error:
free
(
retval
);
VIR_FREE
(
retval
);
if
(
tapfd
!=
-
1
)
close
(
tapfd
);
return
NULL
;
...
...
@@ -2830,14 +2826,14 @@ int qemudBuildCommandLine(virConnectPtr conn,
/* Add sound hardware */
if
(
sound
)
{
int
size
=
100
;
char
*
modstr
=
calloc
(
1
,
size
+
1
)
;
if
(
!
modstr
)
char
*
modstr
;
if
(
VIR_ALLOC_N
(
modstr
,
size
+
1
)
<
0
)
goto
no_memory
;
while
(
sound
&&
size
>
0
)
{
const
char
*
model
=
qemudSoundModelToString
(
sound
->
model
);
if
(
!
model
)
{
free
(
modstr
);
VIR_FREE
(
modstr
);
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"invalid sound model"
));
goto
error
;
...
...
@@ -2869,14 +2865,14 @@ int qemudBuildCommandLine(virConnectPtr conn,
if
(
vm
->
tapfds
)
{
for
(
i
=
0
;
vm
->
tapfds
[
i
]
!=
-
1
;
i
++
)
close
(
vm
->
tapfds
[
i
]);
free
(
vm
->
tapfds
);
VIR_FREE
(
vm
->
tapfds
);
vm
->
tapfds
=
NULL
;
vm
->
ntapfds
=
0
;
}
if
(
qargv
)
{
for
(
i
=
0
;
i
<
qargc
;
i
++
)
free
((
qargv
)[
i
]);
free
(
qargv
);
VIR_FREE
((
qargv
)[
i
]);
VIR_FREE
(
qargv
);
}
return
-
1
;
...
...
@@ -2928,7 +2924,7 @@ static int qemudSaveConfig(virConnectPtr conn,
if
(
fd
!=
-
1
)
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
return
ret
;
}
...
...
@@ -2940,13 +2936,18 @@ qemudParseVMDeviceDef(virConnectPtr conn,
{
xmlDocPtr
xml
;
xmlNodePtr
node
;
struct
qemud_vm_device_def
*
dev
=
calloc
(
1
,
sizeof
(
*
dev
));
struct
qemud_vm_device_def
*
dev
;
if
(
VIR_ALLOC
(
dev
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
NULL
;
}
if
(
!
(
xml
=
xmlReadDoc
(
BAD_CAST
xmlStr
,
"device.xml"
,
NULL
,
XML_PARSE_NOENT
|
XML_PARSE_NONET
|
XML_PARSE_NOERROR
|
XML_PARSE_NOWARNING
)))
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
NULL
);
return
NULL
;
goto
error
;
}
node
=
xmlDocGetRootElement
(
xml
);
...
...
@@ -2979,7 +2980,7 @@ qemudParseVMDeviceDef(virConnectPtr conn,
error:
if
(
xml
)
xmlFreeDoc
(
xml
);
free
(
dev
);
VIR_FREE
(
dev
);
return
NULL
;
}
...
...
@@ -3027,7 +3028,7 @@ qemudAssignVMDef(virConnectPtr conn,
return
vm
;
}
if
(
!
(
vm
=
calloc
(
1
,
sizeof
(
*
vm
)))
)
{
if
(
VIR_ALLOC
(
vm
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for vm string"
));
return
NULL
;
...
...
@@ -3155,7 +3156,7 @@ static int qemudSaveNetworkConfig(virConnectPtr conn,
cleanup:
free
(
xml
);
VIR_FREE
(
xml
);
return
ret
;
}
...
...
@@ -3164,17 +3165,17 @@ void qemudFreeNetworkDef(struct qemud_network_def *def) {
struct
qemud_dhcp_range_def
*
range
=
def
->
ranges
;
while
(
range
)
{
struct
qemud_dhcp_range_def
*
next
=
range
->
next
;
free
(
range
);
VIR_FREE
(
range
);
range
=
next
;
}
free
(
def
);
VIR_FREE
(
def
);
}
void
qemudFreeNetwork
(
struct
qemud_network
*
network
)
{
qemudFreeNetworkDef
(
network
->
def
);
if
(
network
->
newDef
)
qemudFreeNetworkDef
(
network
->
newDef
);
free
(
network
);
VIR_FREE
(
network
);
}
static
int
qemudParseBridgeXML
(
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
...
...
@@ -3227,7 +3228,7 @@ static int qemudParseDhcpRangesXML(virConnectPtr conn,
continue
;
}
if
(
!
(
range
=
calloc
(
1
,
sizeof
(
*
range
)))
)
{
if
(
VIR_ALLOC
(
range
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for range string"
));
return
0
;
...
...
@@ -3247,7 +3248,7 @@ static int qemudParseDhcpRangesXML(virConnectPtr conn,
def
->
ranges
=
range
;
def
->
nranges
++
;
}
else
{
free
(
range
);
VIR_FREE
(
range
);
}
xmlFree
(
start
);
...
...
@@ -3318,7 +3319,7 @@ static struct qemud_network_def *qemudParseNetworkXML(virConnectPtr conn,
xmlXPathObjectPtr
obj
=
NULL
,
tmp
=
NULL
;
struct
qemud_network_def
*
def
;
if
(
!
(
def
=
calloc
(
1
,
sizeof
(
*
def
)))
)
{
if
(
VIR_ALLOC
(
def
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for network_def string"
));
return
NULL
;
...
...
@@ -3492,7 +3493,7 @@ qemudAssignNetworkDef(virConnectPtr conn,
return
network
;
}
if
(
!
(
network
=
calloc
(
1
,
sizeof
(
*
network
)))
)
{
if
(
VIR_ALLOC
(
network
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for network string"
));
return
NULL
;
...
...
@@ -3703,7 +3704,7 @@ int qemudScanConfigDir(struct qemud_driver *driver,
else
qemudLoadNetworkConfig
(
driver
,
entry
->
d_name
,
path
,
xml
,
autostartLink
);
free
(
xml
);
VIR_FREE
(
xml
);
}
closedir
(
dir
);
...
...
@@ -3839,7 +3840,7 @@ char *qemudGenerateXML(virConnectPtr conn,
const
struct
qemud_vm_input_def
*
input
;
const
struct
qemud_vm_sound_def
*
sound
;
const
struct
qemud_vm_chr_def
*
chr
;
const
char
*
type
=
NULL
;
const
char
*
type
=
NULL
,
*
tmp
;
int
n
,
allones
=
1
;
if
(
!
(
type
=
qemudVirtTypeToString
(
def
->
virtType
)))
{
...
...
@@ -3876,7 +3877,7 @@ char *qemudGenerateXML(virConnectPtr conn,
goto
cleanup
;
}
virBufferVSprintf
(
&
buf
,
" <vcpu cpuset='%s'>%d</vcpu>
\n
"
,
cpumask
,
def
->
vcpus
);
free
(
cpumask
);
VIR_FREE
(
cpumask
);
}
if
(
def
->
os
.
bootloader
[
0
])
...
...
@@ -4116,7 +4117,8 @@ char *qemudGenerateXML(virConnectPtr conn,
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to generate XML: out of memory"
));
cleanup:
free
(
virBufferContentAndReset
(
&
buf
));
tmp
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
tmp
);
return
NULL
;
}
...
...
@@ -4127,6 +4129,7 @@ char *qemudGenerateNetworkXML(virConnectPtr conn,
struct
qemud_network_def
*
def
)
{
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
unsigned
char
*
uuid
;
char
*
tmp
;
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
virBufferAddLit
(
&
buf
,
"<network>
\n
"
);
...
...
@@ -4191,7 +4194,8 @@ char *qemudGenerateNetworkXML(virConnectPtr conn,
no_memory:
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to generate XML: out of memory"
));
free
(
virBufferContentAndReset
(
&
buf
));
tmp
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
tmp
);
return
NULL
;
}
...
...
src/qemu_driver.c
浏览文件 @
895d0fdf
...
...
@@ -178,9 +178,8 @@ qemudStartup(void) {
char
*
base
=
NULL
;
char
driverConf
[
PATH_MAX
];
if
(
!
(
qemu_driver
=
calloc
(
1
,
sizeof
(
*
qemu_driver
))))
{
if
(
VIR_ALLOC
(
qemu_driver
)
<
0
)
return
-
1
;
}
/* Don't have a dom0 so start from 1 */
qemu_driver
->
nextvmid
=
1
;
...
...
@@ -228,8 +227,7 @@ qemudStartup(void) {
base
)
==
-
1
)
goto
out_of_memory
;
free
(
base
);
base
=
NULL
;
VIR_FREE
(
base
);
if
((
qemu_driver
->
caps
=
qemudCapsInit
())
==
NULL
)
goto
out_of_memory
;
...
...
@@ -255,9 +253,8 @@ qemudStartup(void) {
out_of_memory:
qemudLog
(
QEMUD_ERR
,
"%s"
,
_
(
"qemudStartup: out of memory"
));
free
(
base
);
free
(
qemu_driver
);
qemu_driver
=
NULL
;
VIR_FREE
(
base
);
VIR_FREE
(
qemu_driver
);
return
-
1
;
}
...
...
@@ -360,19 +357,18 @@ qemudShutdown(void) {
qemu_driver
->
nactivenetworks
=
0
;
qemu_driver
->
ninactivenetworks
=
0
;
free
(
qemu_driver
->
configDir
);
free
(
qemu_driver
->
autostartDir
);
free
(
qemu_driver
->
networkConfigDir
);
free
(
qemu_driver
->
networkAutostartDir
);
free
(
qemu_driver
->
vncTLSx509certdir
);
VIR_FREE
(
qemu_driver
->
configDir
);
VIR_FREE
(
qemu_driver
->
autostartDir
);
VIR_FREE
(
qemu_driver
->
networkConfigDir
);
VIR_FREE
(
qemu_driver
->
networkAutostartDir
);
VIR_FREE
(
qemu_driver
->
vncTLSx509certdir
);
if
(
qemu_driver
->
brctl
)
brShutdown
(
qemu_driver
->
brctl
);
if
(
qemu_driver
->
iptables
)
iptablesContextFree
(
qemu_driver
->
iptables
);
free
(
qemu_driver
);
qemu_driver
=
NULL
;
VIR_FREE
(
qemu_driver
);
return
0
;
}
...
...
@@ -701,13 +697,13 @@ qemudDetectVcpuPIDs(virConnectPtr conn,
if
(
lastVcpu
!=
(
vm
->
def
->
vcpus
-
1
))
goto
error
;
free
(
qemucpus
);
VIR_FREE
(
qemucpus
);
return
0
;
error:
VIR_FREE
(
vm
->
vcpupids
);
vm
->
vcpupids
=
0
;
free
(
qemucpus
);
vm
->
n
vcpupids
=
0
;
VIR_FREE
(
qemucpus
);
/* Explicitly return success, not error. Older KVM does
not have vCPU -> Thread mapping info and we don't
...
...
@@ -756,7 +752,7 @@ qemudInitCpus(virConnectPtr conn,
"%s"
,
_
(
"resume operation failed"
));
return
-
1
;
}
free
(
info
);
VIR_FREE
(
info
);
return
0
;
}
...
...
@@ -905,16 +901,15 @@ static int qemudStartVMDaemon(virConnectPtr conn,
}
for
(
i
=
0
;
argv
[
i
]
;
i
++
)
free
(
argv
[
i
]);
free
(
argv
);
VIR_FREE
(
argv
[
i
]);
VIR_FREE
(
argv
);
if
(
vm
->
tapfds
)
{
for
(
i
=
0
;
vm
->
tapfds
[
i
]
!=
-
1
;
i
++
)
{
close
(
vm
->
tapfds
[
i
]);
vm
->
tapfds
[
i
]
=
-
1
;
}
free
(
vm
->
tapfds
);
vm
->
tapfds
=
NULL
;
VIR_FREE
(
vm
->
tapfds
);
vm
->
ntapfds
=
0
;
}
...
...
@@ -1005,8 +1000,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
vm
->
pid
=
-
1
;
vm
->
id
=
-
1
;
vm
->
state
=
VIR_DOMAIN_SHUTOFF
;
free
(
vm
->
vcpupids
);
vm
->
vcpupids
=
NULL
;
VIR_FREE
(
vm
->
vcpupids
);
vm
->
nvcpupids
=
0
;
if
(
vm
->
newDef
)
{
...
...
@@ -1058,7 +1052,7 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
(
2
*
network
->
def
->
nranges
)
+
/* --dhcp-range 10.0.0.2,10.0.0.254 */
1
;
/* NULL */
if
(
!
(
*
argv
=
calloc
(
len
,
sizeof
(
**
argv
)))
)
if
(
VIR_ALLOC_N
(
*
argv
,
len
)
<
0
)
goto
no_memory
;
#define APPEND_ARG(v, n, s) do { \
...
...
@@ -1126,8 +1120,8 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
no_memory:
if
(
argv
)
{
for
(
i
=
0
;
(
*
argv
)[
i
];
i
++
)
free
((
*
argv
)[
i
]);
free
(
*
argv
);
VIR_FREE
((
*
argv
)[
i
]);
VIR_FREE
(
*
argv
);
}
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"%s"
,
_
(
"failed to allocate space for dnsmasq argv"
));
...
...
@@ -1155,8 +1149,8 @@ dhcpStartDhcpDaemon(virConnectPtr conn,
ret
=
virExecNonBlock
(
conn
,
argv
,
&
network
->
dnsmasqPid
,
-
1
,
NULL
,
NULL
);
for
(
i
=
0
;
argv
[
i
];
i
++
)
free
(
argv
[
i
]);
free
(
argv
);
VIR_FREE
(
argv
[
i
]);
VIR_FREE
(
argv
);
return
ret
;
}
...
...
@@ -1625,7 +1619,6 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
for
(;;)
{
char
data
[
1024
];
int
got
=
read
(
vm
->
monitor
,
data
,
sizeof
(
data
));
char
*
b
;
if
(
got
==
0
)
goto
error
;
...
...
@@ -1636,10 +1629,9 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
break
;
goto
error
;
}
if
(
!
(
b
=
realloc
(
buf
,
size
+
got
+
1
))
)
if
(
VIR_REALLOC_N
(
buf
,
size
+
got
+
1
)
<
0
)
goto
error
;
buf
=
b
;
memmove
(
buf
+
size
,
data
,
got
);
buf
[
size
+
got
]
=
'\0'
;
size
+=
got
;
...
...
@@ -1673,7 +1665,7 @@ qemudMonitorCommand (const struct qemud_driver *driver ATTRIBUTE_UNUSED,
if
(
safewrite
(
vm
->
logfile
,
buf
,
strlen
(
buf
))
<
0
)
qemudLog
(
QEMUD_WARN
,
_
(
"Unable to log VM console data: %s"
),
strerror
(
errno
));
free
(
buf
);
VIR_FREE
(
buf
);
}
return
-
1
;
}
...
...
@@ -2017,7 +2009,7 @@ static int qemudDomainSuspend(virDomainPtr dom) {
}
vm
->
state
=
VIR_DOMAIN_PAUSED
;
qemudDebug
(
"Reply %s"
,
info
);
free
(
info
);
VIR_FREE
(
info
);
return
0
;
}
...
...
@@ -2045,7 +2037,7 @@ static int qemudDomainResume(virDomainPtr dom) {
}
vm
->
state
=
VIR_DOMAIN_RUNNING
;
qemudDebug
(
"Reply %s"
,
info
);
free
(
info
);
VIR_FREE
(
info
);
return
0
;
}
...
...
@@ -2229,7 +2221,7 @@ static char *qemudEscape(const char *in, int shell)
}
}
if
(
(
out
=
(
char
*
)
malloc
(
len
+
1
))
==
NULL
)
if
(
VIR_ALLOC_N
(
out
,
len
+
1
)
<
0
)
return
NULL
;
for
(
i
=
j
=
0
;
in
[
i
]
!=
'\0'
;
i
++
)
{
...
...
@@ -2338,7 +2330,7 @@ static int qemudDomainSave(virDomainPtr dom,
if
((
fd
=
open
(
path
,
O_CREAT
|
O_TRUNC
|
O_WRONLY
,
S_IRUSR
|
S_IWUSR
))
<
0
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
_
(
"failed to create '%s'"
),
path
);
free
(
xml
);
VIR_FREE
(
xml
);
return
-
1
;
}
...
...
@@ -2346,7 +2338,7 @@ static int qemudDomainSave(virDomainPtr dom,
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"failed to write save header"
));
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
return
-
1
;
}
...
...
@@ -2354,12 +2346,12 @@ static int qemudDomainSave(virDomainPtr dom,
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"failed to write xml"
));
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
return
-
1
;
}
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
/* Migrate to file */
safe_path
=
qemudEscapeShellArg
(
path
);
...
...
@@ -2373,7 +2365,7 @@ static int qemudDomainSave(virDomainPtr dom,
"
\"
"
,
safe_path
)
==
-
1
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"out of memory"
));
free
(
safe_path
);
VIR_FREE
(
safe_path
);
return
-
1
;
}
free
(
safe_path
);
...
...
@@ -2381,12 +2373,12 @@ static int qemudDomainSave(virDomainPtr dom,
if
(
qemudMonitorCommand
(
driver
,
vm
,
command
,
&
info
)
<
0
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"migrate operation failed"
));
free
(
command
);
VIR_FREE
(
command
);
return
-
1
;
}
free
(
info
);
free
(
command
);
VIR_FREE
(
info
);
VIR_FREE
(
command
);
/* Shut it down */
qemudShutdownVMDaemon
(
dom
->
conn
,
driver
,
vm
);
...
...
@@ -2621,7 +2613,7 @@ static int qemudDomainRestore(virConnectPtr conn,
return
-
1
;
}
if
(
(
xml
=
(
char
*
)
malloc
(
header
.
xml_len
))
==
NULL
)
{
if
(
VIR_ALLOC_N
(
xml
,
header
.
xml_len
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"out of memory"
));
close
(
fd
);
...
...
@@ -2632,7 +2624,7 @@ static int qemudDomainRestore(virConnectPtr conn,
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"failed to read XML"
));
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
return
-
1
;
}
...
...
@@ -2641,10 +2633,10 @@ static int qemudDomainRestore(virConnectPtr conn,
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"failed to parse XML"
));
close
(
fd
);
free
(
xml
);
VIR_FREE
(
xml
);
return
-
1
;
}
free
(
xml
);
VIR_FREE
(
xml
);
/* Ensure the name and UUID don't already exist in an active VM */
vm
=
qemudFindVMByUUID
(
driver
,
def
->
uuid
);
...
...
@@ -2687,7 +2679,7 @@ static int qemudDomainRestore(virConnectPtr conn,
"%s"
,
_
(
"failed to resume domain"
));
return
-
1
;
}
free
(
info
);
VIR_FREE
(
info
);
vm
->
state
=
VIR_DOMAIN_RUNNING
;
}
...
...
@@ -2729,7 +2721,7 @@ static int qemudListDefinedDomains(virConnectPtr conn,
cleanup:
for
(
i
=
0
;
i
<
got
;
i
++
)
free
(
names
[
i
]);
VIR_FREE
(
names
[
i
]);
return
-
1
;
}
...
...
@@ -2829,10 +2821,10 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
safe_path
)
==
-
1
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"out of memory"
));
free
(
safe_path
);
VIR_FREE
(
safe_path
);
return
-
1
;
}
free
(
safe_path
);
VIR_FREE
(
safe_path
);
}
else
if
(
asprintf
(
&
cmd
,
"eject cdrom"
)
==
-
1
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
...
...
@@ -2843,11 +2835,11 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
if
(
qemudMonitorCommand
(
driver
,
vm
,
cmd
,
&
reply
)
<
0
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_OPERATION_FAILED
,
"%s"
,
_
(
"cannot change cdrom media"
));
free
(
cmd
);
VIR_FREE
(
cmd
);
return
-
1
;
}
free
(
reply
);
free
(
cmd
);
VIR_FREE
(
reply
);
VIR_FREE
(
cmd
);
strcpy
(
olddisk
->
src
,
newdisk
->
src
);
olddisk
->
type
=
newdisk
->
type
;
return
0
;
...
...
@@ -2880,7 +2872,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
if
(
dev
->
type
!=
QEMUD_DEVICE_DISK
||
dev
->
data
.
disk
.
device
!=
QEMUD_DISK_CDROM
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_NO_SUPPORT
,
"%s"
,
_
(
"only CDROM disk devices can be attached"
));
free
(
dev
);
VIR_FREE
(
dev
);
return
-
1
;
}
...
...
@@ -2895,16 +2887,16 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
if
(
!
disk
)
{
qemudReportError
(
dom
->
conn
,
dom
,
NULL
,
VIR_ERR_NO_SUPPORT
,
"%s"
,
_
(
"CDROM not attached, cannot change media"
));
free
(
dev
);
VIR_FREE
(
dev
);
return
-
1
;
}
if
(
qemudDomainChangeCDROM
(
dom
,
vm
,
disk
,
&
dev
->
data
.
disk
)
<
0
)
{
free
(
dev
);
VIR_FREE
(
dev
);
return
-
1
;
}
free
(
dev
);
VIR_FREE
(
dev
);
return
0
;
}
...
...
@@ -3242,7 +3234,7 @@ static int qemudListNetworks(virConnectPtr conn, char **const names, int nnames)
cleanup:
for
(
i
=
0
;
i
<
got
;
i
++
)
free
(
names
[
i
]);
VIR_FREE
(
names
[
i
]);
return
-
1
;
}
...
...
@@ -3270,7 +3262,7 @@ static int qemudListDefinedNetworks(virConnectPtr conn, char **const names, int
cleanup:
for
(
i
=
0
;
i
<
got
;
i
++
)
free
(
names
[
i
]);
VIR_FREE
(
names
[
i
]);
return
-
1
;
}
...
...
src/test.c
浏览文件 @
895d0fdf
...
...
@@ -45,6 +45,7 @@
#include "util.h"
#include "uuid.h"
#include "capabilities.h"
#include "memory.h"
/* Flags that determine the action to take on a shutdown or crash of a domain
*/
...
...
@@ -275,7 +276,7 @@ static int testLoadDomain(virConnectPtr conn,
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
_
(
"domain uuid"
));
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
ret
=
virXPathLong
(
"string(/domain/memory[1])"
,
ctxt
,
&
l
);
...
...
@@ -309,30 +310,30 @@ static int testLoadDomain(virConnectPtr conn,
if
(
str
!=
NULL
)
{
if
(
!
(
onReboot
=
testRestartStringToFlag
(
str
)))
{
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
_
(
"domain reboot behaviour"
));
free
(
str
);
VIR_FREE
(
str
);
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/on_poweroff[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
if
(
!
(
onPoweroff
=
testRestartStringToFlag
(
str
)))
{
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
_
(
"domain poweroff behaviour"
));
free
(
str
);
VIR_FREE
(
str
);
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/on_crash[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
if
(
!
(
onCrash
=
testRestartStringToFlag
(
str
)))
{
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
_
(
"domain crash behaviour"
));
free
(
str
);
VIR_FREE
(
str
);
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
}
for
(
i
=
0
;
i
<
MAX_DOMAINS
;
i
++
)
{
...
...
@@ -348,7 +349,7 @@ static int testLoadDomain(virConnectPtr conn,
privconn
->
domains
[
handle
].
id
=
domid
;
strncpy
(
privconn
->
domains
[
handle
].
name
,
name
,
sizeof
(
privconn
->
domains
[
handle
].
name
)
-
1
);
privconn
->
domains
[
handle
].
name
[
sizeof
(
privconn
->
domains
[
handle
].
name
)
-
1
]
=
'\0'
;
free
(
name
);
VIR_FREE
(
name
);
name
=
NULL
;
if
(
memory
>
maxMem
)
...
...
@@ -371,7 +372,7 @@ static int testLoadDomain(virConnectPtr conn,
error:
xmlXPathFreeContext
(
ctxt
);
free
(
name
);
VIR_FREE
(
name
);
return
(
-
1
);
}
...
...
@@ -464,7 +465,7 @@ static int testLoadNetwork(virConnectPtr conn,
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
_
(
"network uuid"
));
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
forward
=
virXPathBoolean
(
"count(/network/forward) != 0"
,
ctxt
);
...
...
@@ -512,10 +513,10 @@ static int testLoadNetwork(virConnectPtr conn,
privconn
->
networks
[
handle
].
name
[
sizeof
(
privconn
->
networks
[
handle
].
name
)
-
1
]
=
'\0'
;
strncpy
(
privconn
->
networks
[
handle
].
bridge
,
bridge
?
bridge
:
name
,
sizeof
(
privconn
->
networks
[
handle
].
bridge
)
-
1
);
privconn
->
networks
[
handle
].
bridge
[
sizeof
(
privconn
->
networks
[
handle
].
bridge
)
-
1
]
=
'\0'
;
free
(
name
);
VIR_FREE
(
name
);
name
=
NULL
;
if
(
bridge
)
{
free
(
bridge
);
VIR_FREE
(
bridge
);
bridge
=
NULL
;
}
...
...
@@ -524,32 +525,32 @@ static int testLoadNetwork(virConnectPtr conn,
if
(
forwardDev
)
{
strncpy
(
privconn
->
networks
[
handle
].
forwardDev
,
forwardDev
,
sizeof
(
privconn
->
networks
[
handle
].
forwardDev
)
-
1
);
privconn
->
networks
[
handle
].
forwardDev
[
sizeof
(
privconn
->
networks
[
handle
].
forwardDev
)
-
1
]
=
'\0'
;
free
(
forwardDev
);
VIR_FREE
(
forwardDev
);
}
strncpy
(
privconn
->
networks
[
handle
].
ipAddress
,
ipaddress
,
sizeof
(
privconn
->
networks
[
handle
].
ipAddress
)
-
1
);
privconn
->
networks
[
handle
].
ipAddress
[
sizeof
(
privconn
->
networks
[
handle
].
ipAddress
)
-
1
]
=
'\0'
;
free
(
ipaddress
);
VIR_FREE
(
ipaddress
);
strncpy
(
privconn
->
networks
[
handle
].
ipNetmask
,
ipnetmask
,
sizeof
(
privconn
->
networks
[
handle
].
ipNetmask
)
-
1
);
privconn
->
networks
[
handle
].
ipNetmask
[
sizeof
(
privconn
->
networks
[
handle
].
ipNetmask
)
-
1
]
=
'\0'
;
free
(
ipnetmask
);
VIR_FREE
(
ipnetmask
);
strncpy
(
privconn
->
networks
[
handle
].
dhcpStart
,
dhcpstart
,
sizeof
(
privconn
->
networks
[
handle
].
dhcpStart
)
-
1
);
privconn
->
networks
[
handle
].
dhcpStart
[
sizeof
(
privconn
->
networks
[
handle
].
dhcpStart
)
-
1
]
=
'\0'
;
free
(
dhcpstart
);
VIR_FREE
(
dhcpstart
);
strncpy
(
privconn
->
networks
[
handle
].
dhcpEnd
,
dhcpend
,
sizeof
(
privconn
->
networks
[
handle
].
dhcpEnd
)
-
1
);
privconn
->
networks
[
handle
].
dhcpEnd
[
sizeof
(
privconn
->
networks
[
handle
].
dhcpEnd
)
-
1
]
=
'\0'
;
free
(
dhcpend
);
VIR_FREE
(
dhcpend
);
xmlXPathFreeContext
(
ctxt
);
return
(
handle
);
error:
xmlXPathFreeContext
(
ctxt
);
free
(
forwardDev
);
free
(
ipaddress
);
free
(
ipnetmask
);
free
(
dhcpstart
);
free
(
dhcpend
);
free
(
name
);
VIR_FREE
(
forwardDev
);
VIR_FREE
(
ipaddress
);
VIR_FREE
(
ipnetmask
);
VIR_FREE
(
dhcpstart
);
VIR_FREE
(
dhcpend
);
VIR_FREE
(
name
);
return
(
-
1
);
}
...
...
@@ -601,8 +602,8 @@ static int testLoadNetworkFromFile(virConnectPtr conn,
static
int
testOpenDefault
(
virConnectPtr
conn
)
{
int
u
;
struct
timeval
tv
;
testConnPtr
privconn
=
malloc
(
sizeof
(
*
privconn
))
;
if
(
!
privconn
)
{
testConnPtr
privconn
;
if
(
VIR_ALLOC
(
privconn
)
<
0
)
{
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"testConn"
);
return
VIR_DRV_OPEN_ERROR
;
}
...
...
@@ -677,7 +678,9 @@ static char *testBuildFilename(const char *relativeTo,
offset
=
strrchr
(
relativeTo
,
'/'
);
if
((
baseLen
=
(
offset
-
relativeTo
+
1
)))
{
char
*
absFile
=
malloc
(
baseLen
+
strlen
(
filename
)
+
1
);
char
*
absFile
;
if
(
VIR_ALLOC_N
(
absFile
,
baseLen
+
strlen
(
filename
)
+
1
)
<
0
)
return
NULL
;
strncpy
(
absFile
,
relativeTo
,
baseLen
);
absFile
[
baseLen
]
=
'\0'
;
strcat
(
absFile
,
filename
);
...
...
@@ -697,8 +700,8 @@ static int testOpenFromFile(virConnectPtr conn,
xmlNodePtr
*
domains
,
*
networks
=
NULL
;
xmlXPathContextPtr
ctxt
=
NULL
;
virNodeInfoPtr
nodeInfo
;
testConnPtr
privconn
=
calloc
(
1
,
sizeof
(
*
privconn
))
;
if
(
!
privconn
)
{
testConnPtr
privconn
;
if
(
VIR_ALLOC
(
privconn
)
<
0
)
{
testError
(
NULL
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"testConn"
);
return
VIR_DRV_OPEN_ERROR
;
}
...
...
@@ -794,7 +797,7 @@ static int testOpenFromFile(virConnectPtr conn,
if
(
str
!=
NULL
)
{
strncpy
(
nodeInfo
->
model
,
str
,
sizeof
(
nodeInfo
->
model
)
-
1
);
nodeInfo
->
model
[
sizeof
(
nodeInfo
->
model
)
-
1
]
=
'\0'
;
free
(
str
);
VIR_FREE
(
str
);
}
ret
=
virXPathLong
(
"string(/node/memory[1])"
,
ctxt
,
&
l
);
...
...
@@ -815,21 +818,21 @@ static int testOpenFromFile(virConnectPtr conn,
xmlChar
*
domFile
=
xmlGetProp
(
domains
[
i
],
BAD_CAST
"file"
);
char
*
absFile
=
testBuildFilename
(
file
,
(
const
char
*
)
domFile
);
int
domid
=
privconn
->
nextDomID
++
,
handle
;
free
(
domFile
);
VIR_FREE
(
domFile
);
if
(
!
absFile
)
{
testError
(
NULL
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"resolving domain filename"
));
goto
error
;
}
if
((
handle
=
testLoadDomainFromFile
(
conn
,
domid
,
absFile
))
<
0
)
{
free
(
absFile
);
VIR_FREE
(
absFile
);
goto
error
;
}
privconn
->
domains
[
handle
].
config
=
1
;
free
(
absFile
);
VIR_FREE
(
absFile
);
privconn
->
numDomains
++
;
}
if
(
domains
!=
NULL
)
{
free
(
domains
);
VIR_FREE
(
domains
);
domains
=
NULL
;
}
...
...
@@ -840,21 +843,21 @@ static int testOpenFromFile(virConnectPtr conn,
xmlChar
*
netFile
=
xmlGetProp
(
networks
[
i
],
BAD_CAST
"file"
);
char
*
absFile
=
testBuildFilename
(
file
,
(
const
char
*
)
netFile
);
int
handle
;
free
(
netFile
);
VIR_FREE
(
netFile
);
if
(
!
absFile
)
{
testError
(
NULL
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"resolving network filename"
));
goto
error
;
}
if
((
handle
=
testLoadNetworkFromFile
(
conn
,
absFile
))
<
0
)
{
free
(
absFile
);
VIR_FREE
(
absFile
);
goto
error
;
}
privconn
->
networks
[
handle
].
config
=
1
;
free
(
absFile
);
VIR_FREE
(
absFile
);
privconn
->
numNetworks
++
;
}
if
(
networks
!=
NULL
)
{
free
(
networks
);
VIR_FREE
(
networks
);
networks
=
NULL
;
}
}
...
...
@@ -866,13 +869,13 @@ static int testOpenFromFile(virConnectPtr conn,
error:
xmlXPathFreeContext
(
ctxt
);
free
(
domains
);
free
(
networks
);
VIR_FREE
(
domains
);
VIR_FREE
(
networks
);
if
(
xml
)
xmlFreeDoc
(
xml
);
if
(
fd
!=
-
1
)
close
(
fd
);
free
(
privconn
);
VIR_FREE
(
privconn
);
conn
->
privateData
=
NULL
;
return
VIR_DRV_OPEN_ERROR
;
}
...
...
@@ -945,7 +948,7 @@ static int testOpen(virConnectPtr conn,
static
int
testClose
(
virConnectPtr
conn
)
{
GET_CONNECTION
(
conn
,
-
1
);
free
(
privconn
);
VIR_FREE
(
privconn
);
conn
->
privateData
=
conn
;
return
0
;
}
...
...
@@ -1361,11 +1364,11 @@ static int testDomainSave(virDomainPtr domain,
if
(
safewrite
(
fd
,
xml
,
len
)
<
0
)
{
testError
(
domain
->
conn
,
domain
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"cannot write metadata"
));
free
(
xml
);
VIR_FREE
(
xml
);
close
(
fd
);
return
(
-
1
);
}
free
(
xml
);
VIR_FREE
(
xml
);
if
(
close
(
fd
)
<
0
)
{
testError
(
domain
->
conn
,
domain
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"cannot save domain data"
));
...
...
@@ -1419,8 +1422,7 @@ static int testDomainRestore(virConnectPtr conn,
close
(
fd
);
return
(
-
1
);
}
xml
=
malloc
(
len
+
1
);
if
(
!
xml
)
{
if
(
VIR_ALLOC_N
(
xml
,
len
+
1
)
<
0
)
{
testError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"xml"
);
close
(
fd
);
return
(
-
1
);
...
...
@@ -1435,7 +1437,7 @@ static int testDomainRestore(virConnectPtr conn,
close
(
fd
);
domid
=
privconn
->
nextDomID
++
;
ret
=
testLoadDomainFromDoc
(
conn
,
domid
,
xml
);
free
(
xml
);
VIR_FREE
(
xml
);
return
ret
<
0
?
-
1
:
0
;
}
...
...
src/util.c
浏览文件 @
895d0fdf
...
...
@@ -47,7 +47,7 @@
#include "event.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
#include "util-lib.c"
#ifndef MIN
...
...
@@ -302,19 +302,14 @@ fread_file_lim (FILE *stream, size_t max_len, size_t *length)
size_t
requested
;
if
(
size
+
BUFSIZ
+
1
>
alloc
)
{
char
*
new_buf
;
alloc
+=
alloc
/
2
;
if
(
alloc
<
size
+
BUFSIZ
+
1
)
alloc
=
size
+
BUFSIZ
+
1
;
new_buf
=
realloc
(
buf
,
alloc
);
if
(
!
new_buf
)
{
if
(
VIR_ALLOC_N
(
buf
,
alloc
)
<
0
)
{
save_errno
=
errno
;
break
;
}
buf
=
new_buf
;
}
/* Ensure that (size + requested <= max_len); */
...
...
@@ -358,7 +353,7 @@ int __virFileReadAll(const char *path, int maxlen, char **buf)
}
if
(
len
>
maxlen
||
(
int
)
len
!=
len
)
{
free
(
s
);
VIR_FREE
(
s
);
virLog
(
"File '%s' is too large %d, max %d"
,
path
,
(
int
)
len
,
maxlen
);
goto
error
;
...
...
src/xend_internal.c
浏览文件 @
895d0fdf
...
...
@@ -44,6 +44,7 @@
#include "xend_internal.h"
#include "xen_internal.h"
/* for DOM0_INTERFACE_VERSION */
#include "xs_internal.h"
/* To extract VNC port & Serial console TTY */
#include "memory.h"
/* required for cpumap_t */
#include <xen/dom0_ops.h>
...
...
@@ -630,7 +631,7 @@ xend_op_ext2(virConnectPtr xend, const char *path, char *error,
content
=
virBufferContentAndReset
(
&
buf
);
ret
=
http2unix
(
xend
,
xend_post
(
xend
,
path
,
content
,
error
,
n_error
));
free
(
content
);
VIR_FREE
(
content
);
return
ret
;
}
...
...
@@ -825,14 +826,15 @@ static char *
urlencode
(
const
char
*
string
)
{
size_t
len
=
strlen
(
string
);
char
*
buffer
=
malloc
(
len
*
3
+
1
)
;
char
*
ptr
=
buffer
;
char
*
buffer
;
char
*
ptr
;
size_t
i
;
if
(
buffer
==
NULL
)
{
if
(
VIR_ALLOC_N
(
buffer
,
len
*
3
+
1
)
<
0
)
{
virXendError
(
NULL
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate new buffer"
));
return
(
NULL
);
}
ptr
=
buffer
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
switch
(
string
[
i
])
{
case
' '
:
...
...
@@ -909,6 +911,7 @@ int is_sound_model_conflict(const char *model, const char *soundstr) {
char
*
sound_string_to_xml
(
const
char
*
sound
)
{
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
char
*
tmp
;
while
(
sound
)
{
int
modelsize
,
valid
,
collision
=
0
;
...
...
@@ -925,15 +928,16 @@ char *sound_string_to_xml(const char *sound) {
if
(
STREQ
(
model
,
"all"
))
{
int
i
;
if
(
virBufferError
(
&
buf
))
{
free
(
model
);
VIR_FREE
(
model
);
goto
error
;
}
free
(
virBufferContentAndReset
(
&
buf
));
tmp
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
tmp
);
for
(
i
=
0
;
i
<
sizeof
(
sound_models
)
/
sizeof
(
*
sound_models
);
++
i
)
virBufferVSprintf
(
&
buf
,
" <sound model='%s'/>
\n
"
,
sound_models
[
i
]);
free
(
model
);
VIR_FREE
(
model
);
break
;
}
}
...
...
@@ -944,7 +948,7 @@ char *sound_string_to_xml(const char *sound) {
virBufferVSprintf
(
&
buf
,
" <sound model='%s'/>
\n
"
,
model
);
sound
=
(
model_end
?
++
model_end
:
NULL
);
free
(
model
);
VIR_FREE
(
model
);
}
if
(
virBufferError
(
&
buf
))
...
...
@@ -952,7 +956,8 @@ char *sound_string_to_xml(const char *sound) {
return
virBufferContentAndReset
(
&
buf
);
error:
free
(
virBufferContentAndReset
(
&
buf
));
tmp
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
tmp
);
return
NULL
;
}
...
...
@@ -1092,8 +1097,7 @@ xenDaemonListDomainsOld(virConnectPtr xend)
count
++
;
}
ptr
=
malloc
((
count
+
1
)
*
sizeof
(
char
*
)
+
extra
);
if
(
ptr
==
NULL
)
if
(
VIR_ALLOC_N
(
ptr
,
count
+
1
+
extra
)
<
0
)
goto
error
;
ret
=
(
char
**
)
ptr
;
...
...
@@ -1149,7 +1153,7 @@ xenDaemonDomainCreateLinux(virConnectPtr xend, const char *sexpr)
ret
=
xend_op
(
xend
,
""
,
"op"
,
"create"
,
"config"
,
ptr
,
NULL
);
serrno
=
errno
;
free
(
ptr
);
VIR_FREE
(
ptr
);
errno
=
serrno
;
return
ret
;
...
...
@@ -1250,10 +1254,8 @@ xenDaemonDomainLookupByID(virConnectPtr xend,
error:
sexpr_free
(
root
);
if
(
domname
&&
*
domname
)
{
free
(
*
domname
);
*
domname
=
NULL
;
}
if
(
domname
)
VIR_FREE
(
*
domname
);
return
(
-
1
);
}
...
...
@@ -1694,11 +1696,11 @@ no_memory:
error:
free
(
path
);
free
(
bindHost
);
free
(
bindPort
);
free
(
connectHost
);
free
(
connectPort
);
VIR_FREE
(
path
);
VIR_FREE
(
bindHost
);
VIR_FREE
(
bindPort
);
VIR_FREE
(
connectHost
);
VIR_FREE
(
connectPort
);
return
ret
;
}
...
...
@@ -1723,7 +1725,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
{
struct
sexpr
*
cur
,
*
node
;
const
char
*
tmp
;
char
*
tty
;
char
*
tty
,
*
val
;
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
int
hvm
=
0
,
bootloader
=
0
,
vfb
=
0
;
int
domid
=
-
1
;
...
...
@@ -1906,8 +1908,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
goto
bad_parse
;
}
drvName
=
malloc
((
offset
-
src
)
+
1
);
if
(
!
drvName
)
{
if
(
VIR_ALLOC_N
(
drvName
,
(
offset
-
src
)
+
1
)
<
0
)
{
virXendError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate new buffer"
));
goto
bad_parse
;
...
...
@@ -1925,8 +1926,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
goto
bad_parse
;
}
drvType
=
malloc
((
offset
-
src
)
+
1
);
if
(
!
drvType
)
{
if
(
VIR_ALLOC_N
(
drvType
,
(
offset
-
src
)
+
1
)
<
0
)
{
virXendError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate new buffer"
));
goto
bad_parse
;
...
...
@@ -2004,8 +2004,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
virBufferAddLit
(
&
buf
,
" </disk>
\n
"
);
bad_parse:
free
(
drvName
);
free
(
drvType
);
VIR_FREE
(
drvName
);
VIR_FREE
(
drvType
);
}
else
if
(
sexpr_lookup
(
node
,
"device/vif"
))
{
const
char
*
tmp2
,
*
model
;
tmp2
=
sexpr_node
(
node
,
"device/vif/script"
);
...
...
@@ -2191,7 +2191,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
virBufferAddLit
(
&
buf
,
" <target port='0'/>
\n
"
);
virBufferAddLit
(
&
buf
,
" </console>
\n
"
);
}
free
(
tty
);
VIR_FREE
(
tty
);
if
(
hvm
)
{
if
(
sexpr_node
(
root
,
"domain/image/hvm/soundhw"
))
{
...
...
@@ -2200,7 +2200,7 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
if
(
tmp
&&
*
tmp
)
{
if
((
soundxml
=
sound_string_to_xml
(
tmp
)))
{
virBufferVSprintf
(
&
buf
,
"%s"
,
soundxml
);
free
(
soundxml
);
VIR_FREE
(
soundxml
);
}
else
{
virXendError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"parsing soundhw string failed."
));
...
...
@@ -2221,7 +2221,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
return
virBufferContentAndReset
(
&
buf
);
error:
free
(
virBufferContentAndReset
(
&
buf
));
val
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
val
);
return
(
NULL
);
}
...
...
@@ -2379,11 +2380,9 @@ sexpr_to_xend_topology(virConnectPtr conn,
numCpus
=
sexpr_int
(
root
,
"node/nr_cpus"
);
cpuset
=
malloc
(
numCpus
*
sizeof
(
*
cpuset
));
if
(
cpuset
==
NULL
)
if
(
VIR_ALLOC_N
(
cpuset
,
numCpus
)
<
0
)
goto
memory_error
;
cpuNums
=
malloc
(
numCpus
*
sizeof
(
*
cpuNums
));
if
(
cpuNums
==
NULL
)
if
(
VIR_ALLOC_N
(
cpuNums
,
numCpus
)
<
0
)
goto
memory_error
;
cur
=
nodeToCpu
;
...
...
@@ -2423,21 +2422,21 @@ sexpr_to_xend_topology(virConnectPtr conn,
cpuNums
)
<
0
)
goto
memory_error
;
}
free
(
cpuNums
);
free
(
cpuset
);
VIR_FREE
(
cpuNums
);
VIR_FREE
(
cpuset
);
return
(
0
);
parse_error:
virXendError
(
conn
,
VIR_ERR_XEN_CALL
,
_
(
"topology syntax error"
));
error:
free
(
cpuNums
);
free
(
cpuset
);
VIR_FREE
(
cpuNums
);
VIR_FREE
(
cpuset
);
return
(
-
1
);
memory_error:
free
(
cpuNums
);
free
(
cpuset
);
VIR_FREE
(
cpuNums
);
VIR_FREE
(
cpuset
);
virXendError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate buffer"
));
return
(
-
1
);
}
...
...
@@ -3269,7 +3268,7 @@ xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids)
}
error:
sexpr_free
(
root
);
sexpr_free
(
root
);
return
(
ret
);
}
...
...
@@ -3302,7 +3301,7 @@ xenDaemonNumOfDomains(virConnectPtr conn)
}
error:
sexpr_free
(
root
);
sexpr_free
(
root
);
return
(
ret
);
}
#endif
/* ! PROXY */
...
...
@@ -3331,11 +3330,11 @@ xenDaemonLookupByID(virConnectPtr conn, int id) {
if
(
ret
==
NULL
)
return
NULL
;
ret
->
id
=
id
;
free
(
name
);
VIR_FREE
(
name
);
return
(
ret
);
error:
free
(
name
);
VIR_FREE
(
name
);
return
(
NULL
);
}
...
...
@@ -3543,7 +3542,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
}
tmp
++
;
}
free
(
names
);
VIR_FREE
(
names
);
}
else
{
/* New approach for xen >= 3.0.4 */
char
*
domname
=
NULL
;
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
...
...
@@ -3569,7 +3568,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
if
(
ret
==
NULL
)
return
NULL
;
ret
->
id
=
id
;
free
(
name
);
VIR_FREE
(
name
);
return
(
ret
);
}
...
...
@@ -3610,14 +3609,14 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
if
((
sexpr
==
NULL
)
||
(
name
==
NULL
))
{
virXendError
(
conn
,
VIR_ERR_XML_ERROR
,
_
(
"failed to parse domain description"
));
free
(
sexpr
);
free
(
name
);
VIR_FREE
(
sexpr
);
VIR_FREE
(
name
);
return
(
NULL
);
}
ret
=
xenDaemonDomainCreateLinux
(
conn
,
sexpr
);
free
(
sexpr
);
VIR_FREE
(
sexpr
);
if
(
ret
!=
0
)
{
goto
error
;
}
...
...
@@ -3633,7 +3632,7 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
if
((
ret
=
xenDaemonDomainResume
(
dom
))
<
0
)
goto
error
;
free
(
name
);
VIR_FREE
(
name
);
return
(
dom
);
...
...
@@ -3643,7 +3642,7 @@ xenDaemonCreateLinux(virConnectPtr conn, const char *xmlDesc,
xenDaemonDomainDestroy
(
dom
);
virUnrefDomain
(
dom
);
}
free
(
name
);
VIR_FREE
(
name
);
return
(
NULL
);
}
...
...
@@ -3683,7 +3682,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
str
=
virDomainGetOSType
(
domain
);
if
(
STREQ
(
str
,
"hvm"
))
hvm
=
1
;
free
(
str
);
VIR_FREE
(
str
);
sexpr
=
virParseXMLDevice
(
domain
->
conn
,
xml
,
hvm
,
priv
->
xendConfigVersion
);
if
(
sexpr
==
NULL
)
return
(
-
1
);
...
...
@@ -3702,7 +3701,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
ret
=
xend_op
(
domain
->
conn
,
domain
->
name
,
"op"
,
"device_configure"
,
"config"
,
conf
,
"dev"
,
ref
,
NULL
);
}
free
(
sexpr
);
VIR_FREE
(
sexpr
);
return
ret
;
}
...
...
@@ -3810,7 +3809,7 @@ xenDaemonDomainSetAutostart(virDomainPtr domain,
// Change the autostart value in place, then define the new sexpr
autonode
=
sexpr_lookup
(
root
,
"domain/on_xend_start"
);
free
(
autonode
->
u
.
s
.
car
->
u
.
value
);
VIR_FREE
(
autonode
->
u
.
s
.
car
->
u
.
value
);
autonode
->
u
.
s
.
car
->
u
.
value
=
(
autostart
?
strdup
(
"start"
)
:
strdup
(
"ignore"
));
if
(
!
(
autonode
->
u
.
s
.
car
->
u
.
value
))
{
...
...
@@ -3996,7 +3995,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
"port"
,
port
,
"resource"
,
"0"
,
/* required, xend ignores it */
NULL
);
free
(
hostname
);
VIR_FREE
(
hostname
);
DEBUG0
(
"migration done"
);
...
...
@@ -4028,14 +4027,14 @@ virDomainPtr xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc) {
if
((
sexpr
==
NULL
)
||
(
name
==
NULL
))
{
virXendError
(
conn
,
VIR_ERR_XML_ERROR
,
_
(
"failed to parse domain description"
));
free
(
sexpr
);
free
(
name
);
VIR_FREE
(
sexpr
);
VIR_FREE
(
name
);
return
(
NULL
);
}
ret
=
xend_op
(
conn
,
""
,
"op"
,
"new"
,
"config"
,
sexpr
,
NULL
);
free
(
sexpr
);
VIR_FREE
(
sexpr
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
_
(
"Failed to create inactive domain %s
\n
"
),
name
);
goto
error
;
...
...
@@ -4048,7 +4047,7 @@ virDomainPtr xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc) {
return
(
dom
);
error:
free
(
name
);
VIR_FREE
(
name
);
return
(
NULL
);
}
int
xenDaemonDomainCreate
(
virDomainPtr
domain
)
...
...
@@ -4318,7 +4317,7 @@ xenDaemonGetSchedulerParameters(virDomainPtr domain,
error:
sexpr_free
(
root
);
free
(
sched_type
);
VIR_FREE
(
sched_type
);
return
(
ret
);
}
...
...
@@ -4430,7 +4429,7 @@ xenDaemonSetSchedulerParameters(virDomainPtr domain,
error:
sexpr_free
(
root
);
free
(
sched_type
);
VIR_FREE
(
sched_type
);
return
(
ret
);
}
...
...
src/xm_internal.c
浏览文件 @
895d0fdf
此差异已折叠。
点击以展开。
src/xml.c
浏览文件 @
895d0fdf
...
...
@@ -26,6 +26,7 @@
#include "xml.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
#include "xs_internal.h"
/* for xenStoreDomainGetNetworkID */
#include "xen_unified.h"
#include "xend_internal.h"
/* for is_sound_* functions */
...
...
@@ -274,19 +275,18 @@ virConvertCpuSet(virConnectPtr conn, const char *str, int maxcpu) {
if
(
maxcpu
<=
0
)
maxcpu
=
4096
;
cpuset
=
calloc
(
maxcpu
,
sizeof
(
*
cpuset
));
if
(
cpuset
==
NULL
)
{
if
(
VIR_ALLOC_N
(
cpuset
,
maxcpu
)
<
0
)
{
virXMLError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate buffer"
),
0
);
return
(
NULL
);
}
ret
=
virParseCpuSet
(
conn
,
&
cur
,
0
,
cpuset
,
maxcpu
);
if
(
ret
<
0
)
{
free
(
cpuset
);
VIR_FREE
(
cpuset
);
return
(
NULL
);
}
res
=
virSaveCpuSet
(
conn
,
cpuset
,
maxcpu
);
free
(
cpuset
);
VIR_FREE
(
cpuset
);
return
(
res
);
}
...
...
@@ -309,7 +309,7 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
char
*
sound
;
xmlNodePtr
*
nodes
=
NULL
;
if
(
!
(
sound
=
calloc
(
1
,
size
+
1
))
)
{
if
(
VIR_ALLOC_N
(
sound
,
size
+
1
)
<
0
)
{
virXMLError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"failed to allocate sound string"
),
0
);
return
NULL
;
...
...
@@ -332,7 +332,7 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
if
(
!
is_sound_model_valid
(
model
))
{
virXMLError
(
conn
,
VIR_ERR_XML_ERROR
,
_
(
"unknown sound model type"
),
0
);
free
(
model
);
VIR_FREE
(
model
);
goto
error
;
}
...
...
@@ -345,21 +345,21 @@ char * virBuildSoundStringFromXML(virConnectPtr conn,
if
(
*
sound
&&
(
size
>=
(
strlen
(
model
)
+
1
)))
{
strncat
(
sound
,
","
,
size
--
);
}
else
if
(
*
sound
||
size
<
strlen
(
model
))
{
free
(
model
);
VIR_FREE
(
model
);
continue
;
}
strncat
(
sound
,
model
,
size
);
size
-=
strlen
(
model
);
}
free
(
model
);
VIR_FREE
(
model
);
}
}
free
(
nodes
);
VIR_FREE
(
nodes
);
return
sound
;
error:
free
(
nodes
);
VIR_FREE
(
nodes
);
return
NULL
;
}
#endif
/* !PROXY */
...
...
@@ -590,11 +590,11 @@ virXPathNodeSet(const char *xpath, xmlXPathContextPtr ctxt,
ret
=
obj
->
nodesetval
->
nodeNr
;
if
(
list
!=
NULL
)
{
*
list
=
malloc
(
ret
*
sizeof
(
**
list
));
if
(
*
list
==
NULL
)
{
if
(
VIR_ALLOC_N
(
*
list
,
ret
)
<
0
)
{
virXMLError
(
NULL
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate string array"
),
ret
*
sizeof
(
**
list
));
ret
=
-
1
;
}
else
{
memcpy
(
*
list
,
obj
->
nodesetval
->
nodeTab
,
ret
*
sizeof
(
xmlNodePtr
));
...
...
@@ -1026,7 +1026,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
fdfile
=
xmlGetProp
(
cur
,
BAD_CAST
"file"
);
if
(
fdfile
!=
NULL
)
{
virBufferVSprintf
(
buf
,
"(fda '%s')"
,
fdfile
);
free
(
fdfile
);
VIR_FREE
(
fdfile
);
}
}
...
...
@@ -1040,7 +1040,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
fdfile
=
xmlGetProp
(
cur
,
BAD_CAST
"file"
);
if
(
fdfile
!=
NULL
)
{
virBufferVSprintf
(
buf
,
"(fdb '%s')"
,
fdfile
);
free
(
fdfile
);
VIR_FREE
(
fdfile
);
}
}
...
...
@@ -1118,7 +1118,7 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
}
xmlFree
(
bus
);
}
free
(
nodes
);
VIR_FREE
(
nodes
);
nodes
=
NULL
;
}
...
...
@@ -1157,19 +1157,19 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node,
if
(
!
(
soundstr
=
virBuildSoundStringFromXML
(
conn
,
ctxt
)))
goto
error
;
virBufferVSprintf
(
buf
,
"(soundhw '%s')"
,
soundstr
);
free
(
soundstr
);
VIR_FREE
(
soundstr
);
}
str
=
virXPathString
(
"string(/domain/clock/@offset)"
,
ctxt
);
if
(
str
!=
NULL
&&
STREQ
(
str
,
"localtime"
))
{
virBufferAddLit
(
buf
,
"(localtime 1)"
);
}
free
(
str
);
VIR_FREE
(
str
);
return
(
0
);
error:
free
(
nodes
);
VIR_FREE
(
nodes
);
return
(
-
1
);
}
...
...
@@ -1531,7 +1531,7 @@ virDomainParseXMLIfDesc(virConnectPtr conn ATTRIBUTE_UNUSED,
}
virNetworkFree
(
network
);
virBufferVSprintf
(
buf
,
"(bridge '%s')"
,
bridge
);
free
(
bridge
);
VIR_FREE
(
bridge
);
}
}
if
(
script
!=
NULL
)
...
...
@@ -1578,7 +1578,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
{
xmlDocPtr
xml
=
NULL
;
xmlNodePtr
node
;
char
*
nam
=
NULL
;
char
*
nam
=
NULL
,
*
tmp
;
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
xmlChar
*
prop
;
xmlParserCtxtPtr
pctxt
;
...
...
@@ -1675,30 +1675,29 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* it in a range format guaranteed to be understood by Xen.
*/
if
(
maxcpu
>
0
)
{
cpuset
=
malloc
(
maxcpu
*
sizeof
(
*
cpuset
));
if
(
cpuset
!=
NULL
)
{
res
=
virParseCpuSet
(
conn
,
&
cur
,
0
,
cpuset
,
maxcpu
);
if
(
res
>
0
)
{
ranges
=
virSaveCpuSet
(
conn
,
cpuset
,
maxcpu
);
if
(
ranges
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(cpus '%s')"
,
ranges
);
free
(
ranges
);
}
}
free
(
cpuset
);
if
(
res
<
0
)
goto
error
;
}
else
{
if
(
VIR_ALLOC_N
(
cpuset
,
maxcpu
)
<
0
)
{
virXMLError
(
conn
,
VIR_ERR_NO_MEMORY
,
xmldesc
,
0
);
goto
error
;
}
res
=
virParseCpuSet
(
conn
,
&
cur
,
0
,
cpuset
,
maxcpu
);
if
(
res
>
0
)
{
ranges
=
virSaveCpuSet
(
conn
,
cpuset
,
maxcpu
);
if
(
ranges
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(cpus '%s')"
,
ranges
);
VIR_FREE
(
ranges
);
}
}
VIR_FREE
(
cpuset
);
if
(
res
<
0
)
goto
error
;
}
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/uuid[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(uuid '%s')"
,
str
);
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/bootloader[1])"
,
ctxt
);
...
...
@@ -1709,7 +1708,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* significant and should be discarded
*/
bootloader
=
1
;
free
(
str
);
VIR_FREE
(
str
);
}
else
if
(
virXPathNumber
(
"count(/domain/bootloader)"
,
ctxt
,
&
f
)
==
0
&&
(
f
>
0
))
{
virBufferAddLit
(
&
buf
,
"(bootloader)"
);
...
...
@@ -1726,25 +1725,25 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
* ignore the bootloader_args value unless a bootloader was specified
*/
virBufferVSprintf
(
&
buf
,
"(bootloader_args '%s')"
,
str
);
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/on_poweroff[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(on_poweroff '%s')"
,
str
);
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/on_reboot[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(on_reboot '%s')"
,
str
);
free
(
str
);
VIR_FREE
(
str
);
}
str
=
virXPathString
(
"string(/domain/on_crash[1])"
,
ctxt
);
if
(
str
!=
NULL
)
{
virBufferVSprintf
(
&
buf
,
"(on_crash '%s')"
,
str
);
free
(
str
);
VIR_FREE
(
str
);
}
if
(
!
bootloader
)
{
...
...
@@ -1810,11 +1809,11 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
res
=
virDomainParseXMLDiskDesc
(
conn
,
nodes
[
i
],
&
buf
,
hvm
,
xendConfigVersion
);
if
(
res
!=
0
)
{
free
(
nodes
);
VIR_FREE
(
nodes
);
goto
error
;
}
}
free
(
nodes
);
VIR_FREE
(
nodes
);
}
nb_nodes
=
virXPathNodeSet
(
"/domain/devices/interface"
,
ctxt
,
&
nodes
);
...
...
@@ -1825,12 +1824,12 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
virDomainParseXMLIfDesc
(
conn
,
nodes
[
i
],
&
buf
,
hvm
,
xendConfigVersion
);
if
(
res
!=
0
)
{
free
(
nodes
);
VIR_FREE
(
nodes
);
goto
error
;
}
virBufferAddLit
(
&
buf
,
")"
);
}
free
(
nodes
);
VIR_FREE
(
nodes
);
}
/* New style PV graphics config xen >= 3.0.4,
...
...
@@ -1842,11 +1841,11 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
for
(
i
=
0
;
i
<
nb_nodes
;
i
++
)
{
res
=
virDomainParseXMLGraphicsDescVFB
(
conn
,
nodes
[
i
],
&
buf
);
if
(
res
!=
0
)
{
free
(
nodes
);
VIR_FREE
(
nodes
);
goto
error
;
}
}
free
(
nodes
);
VIR_FREE
(
nodes
);
}
}
...
...
@@ -1860,7 +1859,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
if
(
name
!=
NULL
)
*
name
=
nam
;
else
free
(
nam
);
VIR_FREE
(
nam
);
if
(
virBufferError
(
&
buf
))
{
virXMLError
(
conn
,
VIR_ERR_NO_MEMORY
,
_
(
"allocate buffer"
),
0
);
...
...
@@ -1870,7 +1869,7 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
return
virBufferContentAndReset
(
&
buf
);
error:
free
(
nam
);
VIR_FREE
(
nam
);
if
(
name
!=
NULL
)
*
name
=
NULL
;
xmlXPathFreeContext
(
ctxt
);
...
...
@@ -1878,7 +1877,8 @@ virDomainParseXMLDesc(virConnectPtr conn, const char *xmldesc, char **name,
xmlFreeDoc
(
xml
);
if
(
pctxt
!=
NULL
)
xmlFreeParserCtxt
(
pctxt
);
free
(
virBufferContentAndReset
(
&
buf
));
tmp
=
virBufferContentAndReset
(
&
buf
);
VIR_FREE
(
tmp
);
return
(
NULL
);
}
...
...
tests/virshtest.c
浏览文件 @
895d0fdf
...
...
@@ -9,7 +9,7 @@
#include "testutils.h"
static
char
*
progname
;
static
char
*
abs_
top_
srcdir
;
static
char
*
abs_srcdir
;
#define MAX_FILE 4096
static
int
testFilterLine
(
char
*
buffer
,
...
...
@@ -36,7 +36,7 @@ static int testCompareOutput(const char *expect_rel, const char *filter,
char
*
actualPtr
=
&
(
actualData
[
0
]);
char
expect
[
PATH_MAX
];
snprintf
(
expect
,
sizeof
expect
-
1
,
"%s/
tests/%s"
,
abs_top
_srcdir
,
expect_rel
);
snprintf
(
expect
,
sizeof
expect
-
1
,
"%s/
%s"
,
abs
_srcdir
,
expect_rel
);
if
(
virtTestLoadFile
(
expect
,
&
expectPtr
,
MAX_FILE
)
<
0
)
return
-
1
;
...
...
@@ -271,24 +271,25 @@ static int testCompareDomstateByName(const void *data ATTRIBUTE_UNUSED) {
int
main
(
int
argc
,
char
**
argv
)
static
int
m
ym
ain
(
int
argc
,
char
**
argv
)
{
int
ret
=
0
;
char
buffer
[
PATH_MAX
];
char
cwd
[
PATH_MAX
];
abs_
top_srcdir
=
getenv
(
"abs_top
_srcdir"
);
if
(
!
abs_
top_
srcdir
)
return
1
;
abs_
srcdir
=
getenv
(
"abs
_srcdir"
);
if
(
!
abs_srcdir
)
abs_srcdir
=
getcwd
(
cwd
,
sizeof
(
cwd
))
;
snprintf
(
buffer
,
PATH_MAX
-
1
,
"test://%s/
docs/testnode.xml"
,
abs_top
_srcdir
);
snprintf
(
buffer
,
PATH_MAX
-
1
,
"test://%s/
../docs/testnode.xml"
,
abs
_srcdir
);
buffer
[
PATH_MAX
-
1
]
=
'\0'
;
progname
=
argv
[
0
];
custom_uri
=
buffer
;
if
(
argc
>
1
)
{
fprintf
(
stderr
,
"Usage: %s
\n
"
,
progname
);
exit
(
EXIT_FAILURE
);
return
(
EXIT_FAILURE
);
}
if
(
virtTestRun
(
"virsh list (default)"
,
...
...
@@ -355,5 +356,7 @@ main(int argc, char **argv)
1
,
testCompareDomstateByName
,
NULL
)
!=
0
)
ret
=
-
1
;
exit
(
ret
==
0
?
EXIT_SUCCESS
:
EXIT_FAILURE
);
return
(
ret
==
0
?
EXIT_SUCCESS
:
EXIT_FAILURE
);
}
VIRT_TEST_MAIN
(
mymain
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录