|
|
|
@ -2,7 +2,7 @@ use std::{
|
|
|
|
|
fs::{self, File},
|
|
|
|
|
io::{self, Write as _},
|
|
|
|
|
path::{Path, PathBuf},
|
|
|
|
|
process::Command,
|
|
|
|
|
process::{Command, Output},
|
|
|
|
|
str,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -14,14 +14,14 @@ pub enum Error {
|
|
|
|
|
#[error("error executing bpftool")]
|
|
|
|
|
BpfTool(#[source] io::Error),
|
|
|
|
|
|
|
|
|
|
#[error("{stderr}\nbpftool failed with exit code {code}")]
|
|
|
|
|
BpfToolExit { code: i32, stderr: String },
|
|
|
|
|
#[error("bpftool failed: {0:?}")]
|
|
|
|
|
BpfToolExit(Output),
|
|
|
|
|
|
|
|
|
|
#[error("bindgen failed")]
|
|
|
|
|
Bindgen(#[source] io::Error),
|
|
|
|
|
|
|
|
|
|
#[error("{stderr}\nbindgen failed with exit code {code}")]
|
|
|
|
|
BindgenExit { code: i32, stderr: String },
|
|
|
|
|
#[error("bindgen failed: {0:?}")]
|
|
|
|
|
BindgenExit(Output),
|
|
|
|
|
|
|
|
|
|
#[error("error reading header file")]
|
|
|
|
|
ReadHeaderFile(#[source] io::Error),
|
|
|
|
@ -74,14 +74,13 @@ pub fn generate<T: AsRef<str>>(
|
|
|
|
|
.output()
|
|
|
|
|
.map_err(Error::Bindgen)?;
|
|
|
|
|
|
|
|
|
|
if !output.status.success() {
|
|
|
|
|
return Err(Error::BindgenExit {
|
|
|
|
|
code: output.status.code().unwrap(),
|
|
|
|
|
stderr: str::from_utf8(&output.stderr).unwrap().to_owned(),
|
|
|
|
|
});
|
|
|
|
|
let Output { status, .. } = &output;
|
|
|
|
|
if !status.success() {
|
|
|
|
|
return Err(Error::BindgenExit(output));
|
|
|
|
|
}
|
|
|
|
|
let Output { stdout, .. } = output;
|
|
|
|
|
|
|
|
|
|
Ok(str::from_utf8(&output.stdout).unwrap().to_owned())
|
|
|
|
|
Ok(String::from_utf8(stdout).unwrap())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn c_header_from_btf(path: &Path) -> Result<String, Error> {
|
|
|
|
@ -92,14 +91,13 @@ fn c_header_from_btf(path: &Path) -> Result<String, Error> {
|
|
|
|
|
.output()
|
|
|
|
|
.map_err(Error::BpfTool)?;
|
|
|
|
|
|
|
|
|
|
if !output.status.success() {
|
|
|
|
|
return Err(Error::BpfToolExit {
|
|
|
|
|
code: output.status.code().unwrap(),
|
|
|
|
|
stderr: str::from_utf8(&output.stderr).unwrap().to_owned(),
|
|
|
|
|
});
|
|
|
|
|
let Output { status, .. } = &output;
|
|
|
|
|
if !status.success() {
|
|
|
|
|
return Err(Error::BpfToolExit(output));
|
|
|
|
|
}
|
|
|
|
|
let Output { stdout, .. } = output;
|
|
|
|
|
|
|
|
|
|
Ok(str::from_utf8(&output.stdout).unwrap().to_owned())
|
|
|
|
|
Ok(String::from_utf8(stdout).unwrap())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn extract_ctypes_prefix(s: &[String]) -> (Vec<String>, Option<String>) {
|
|
|
|
|