I'm try to implement virConnectGetAllDomainStats for php binding api,
but have one issue with VIR_TYPED_PARAM_STRING:
code part:
retval = virConnectGetAllDomainStats(conn->conn, stats,
&retstats, flags);
for (i=0; i < retval; i++) {
zval *arr2;
ALLOC_INIT_ZVAL(arr2);
array_init(arr2);
for (j = 0; j < retstats[i]->nparams; j++) {
params = retstats[i]->params[j];
switch (params.type) {
case VIR_TYPED_PARAM_INT:
add_assoc_long(arr2, params.field,
params.value.i);
case VIR_TYPED_PARAM_UINT:
add_assoc_long(arr2, params.field,
params.value.ui);
case VIR_TYPED_PARAM_LLONG:
add_assoc_long(arr2, params.field,
params.value.l);
case VIR_TYPED_PARAM_ULLONG:
add_assoc_long(arr2, params.field,
params.value.ul);
case VIR_TYPED_PARAM_DOUBLE:
add_assoc_double(arr2, params.field,
params.value.d);
case VIR_TYPED_PARAM_BOOLEAN:
add_assoc_bool(arr2, params.field,
params.value.b);
case VIR_TYPED_PARAM_STRING:
add_assoc_string_ex(arr2,
params.field, strlen(params.field)+1, strdup(params.value.s),
strlen(params.value.s)+1); // SEGFAULT HAPPENING
}
}
gdb shows:
return_value_used=<optimized out>) at libvirt-php.c:2505
arr2 = 0x7ffff7fd72b8
conn = <optimized out>
zconn = 0x7ffff7fd7140
retval = <optimized out>
flags = <optimized out>
stats = <optimized out>
name = <optimized out>
i = <optimized out>
j = <optimized out>
params = {field = "state.state", '\000' <repeats 68
times>,
type = 1, value = {i = 5, ui = 5, l = 5, ul = 5, d =
2.4703282292062327e-323, b = 5 '\005',
s = 0x5 <Address 0x5 out of bounds>}}
retstats = 0x101d870
What i'm doing wrong?
--
Vasiliy Tolstov,
e-mail: v.tolstov(a)selfip.ru