/** * gvir_storage_pool_get_info: * @pool: the storage_pool * @err: Place-holder for possible errors * * Returns: (transfer full): the info. The returned pointer should be * freed using #g_boxed_free() when no longer needed. */ GVirStoragePoolInfo *gvir_storage_pool_get_info(GVirStoragePool *pool, GError **err) { GVirStoragePoolPrivate *priv; virStoragePoolInfo info; GVirStoragePoolInfo *ret; g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL); g_return_val_if_fail(err == NULL || *err == NULL, NULL); priv = pool->priv; if (virStoragePoolGetInfo(priv->handle, &info) < 0) { if (err) *err = gvir_error_new_literal(GVIR_STORAGE_POOL_ERROR, 0, "Unable to get storage pool info"); return NULL; } ret = g_slice_new(GVirStoragePoolInfo); ret->state = info.state; ret->capacity = info.capacity; ret->allocation = info.allocation; ret->available = info.available; return ret; }
ERL_NIF_TERM vert_virStoragePoolGetInfo(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { VERT_RESOURCE *sp = NULL; ErlNifBinary info = {0}; VERT_GET_RESOURCE(0, sp, VERT_RES_STORAGEPOOL); if (!enif_alloc_binary(sizeof(virStoragePoolInfo), &info)) return error_tuple(env, atom_enomem); VERTERR(virStoragePoolGetInfo(sp->res, (virStoragePoolInfoPtr)info.data) < 0); return enif_make_tuple2(env, atom_ok, enif_make_binary(env, &info)); }