use std::ffi::CStr;
use std::os::raw::c_char;
use std::ptr::null_mut;
use elina_sys::{elina_lincons0_fprint, elina_lincons0_t, fclose, free, open_memstream};
use crate::ast::{Environment, Manager};
pub unsafe fn lincons0_to_string<M: Manager>(_man: &M, env: &Environment, lincons0: *mut elina_lincons0_t) -> String {
let mut buf: *mut c_char = null_mut();
let mut len = 0;
let fd = open_memstream(&mut buf, &mut len);
let mut env_names = env.to_env_names();
elina_lincons0_fprint(fd, lincons0, env_names.as_mut_ptr());
fclose(fd);
let res = CStr::from_ptr(buf).to_str().unwrap().to_string();
free(buf as *mut _);
std::mem::drop(env_names);
return res;
}