CAMLlocal1 (rv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- int ids[i], r;
+ int *ids, r;
/* Some libvirt List* functions still throw exceptions if i == 0,
* so catch that and return an empty array directly. This changes
CAMLreturn (rv);
}
+ ids = malloc (sizeof (*ids) * i);
+ if (ids == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListDomains (conn, ids, i));
- CHECK_ERROR (r == -1, "virConnectListDomains");
+ CHECK_ERROR_CLEANUP (r == -1, free (ids), "virConnectListDomains");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i)
Store_field (rv, i, Val_int (ids[i]));
+ free (ids);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListDefinedDomains (conn, names, i));
- CHECK_ERROR (r == -1, "virConnectListDefinedDomains");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virConnectListDefinedDomains");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListNetworks (conn, names, i));
- CHECK_ERROR (r == -1, "virConnectListNetworks");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virConnectListNetworks");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListDefinedNetworks (conn, names, i));
- CHECK_ERROR (r == -1, "virConnectListDefinedNetworks");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virConnectListDefinedNetworks");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListStoragePools (conn, names, i));
- CHECK_ERROR (r == -1, "virConnectListStoragePools");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virConnectListStoragePools");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virConnectPtr conn = Connect_val (connv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virConnectListDefinedStoragePools (conn, names, i));
- CHECK_ERROR (r == -1, "virConnectListDefinedStoragePools");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virConnectListDefinedStoragePools");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}
CAMLlocal2 (rv, strv);
virStoragePoolPtr pool = Pool_val (poolv);
int i = Int_val (iv);
- char *names[i];
+ char **names;
int r;
/* Some libvirt List* functions still throw exceptions if i == 0,
CAMLreturn (rv);
}
+ names = malloc (sizeof (*names) * i);
+ if (names == NULL)
+ caml_raise_out_of_memory ();
+
NONBLOCKING (r = virStoragePoolListVolumes (pool, names, i));
- CHECK_ERROR (r == -1, "virStoragePoolListVolumes");
+ CHECK_ERROR_CLEANUP (r == -1, free (names), "virStoragePoolListVolumes");
rv = caml_alloc (r, 0);
for (i = 0; i < r; ++i) {
Store_field (rv, i, strv);
free (names[i]);
}
+ free (names);
CAMLreturn (rv);
}