Skip to content

Commit 648be0a

Browse files
committed
1. fix anyhow with_context loss other backtrace
2.generate error also use anyhow::error
1 parent be363a4 commit 648be0a

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

libbpf-cargo/src/lib.rs

+13-12
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
)]
6363
#![deny(unsafe_op_in_unsafe_fn)]
6464

65+
use anyhow::anyhow;
6566
use std::path::Path;
6667
use std::path::PathBuf;
6768
use std::result;
@@ -87,10 +88,10 @@ mod test;
8788
/// Canonical error type for this crate.
8889
#[derive(Error, Debug)]
8990
pub enum Error {
90-
#[error("Error building BPF object file: {0}")]
91-
Build(String),
92-
#[error("Error generating skeleton: {0}")]
93-
Generate(String),
91+
#[error("Error building BPF object file")]
92+
Build(#[source] anyhow::Error),
93+
#[error("Error generating skeleton")]
94+
Generate(#[source] anyhow::Error),
9495
}
9596

9697
pub type Result<T> = result::Result<T, Error>;
@@ -223,24 +224,24 @@ impl SkeletonBuilder {
223224
let source = self
224225
.source
225226
.as_ref()
226-
.ok_or_else(|| Error::Build("No source file".into()))?;
227+
.ok_or_else(|| Error::Build(anyhow!("No source file")))?;
227228

228229
let filename = source
229230
.file_name()
230-
.ok_or_else(|| Error::Build("Missing file name".into()))?
231+
.ok_or_else(|| Error::Build(anyhow!("Missing file name")))?
231232
.to_str()
232-
.ok_or_else(|| Error::Build("Invalid unicode in file name".into()))?;
233+
.ok_or_else(|| Error::Build(anyhow!("Invalid unicode in file name")))?;
233234

234235
if !filename.ends_with(".bpf.c") {
235-
return Err(Error::Build(format!(
236+
return Err(Error::Build(anyhow!(
236237
"Source file={} does not have .bpf.c suffix",
237238
source.display()
238239
)));
239240
}
240241

241242
if self.obj.is_none() {
242243
let name = filename.split('.').next().unwrap();
243-
let dir = tempdir().map_err(|e| Error::Build(e.to_string()))?;
244+
let dir = tempdir().map_err(|e| Error::Build(e.into()))?;
244245
let objfile = dir.path().join(format!("{name}.o"));
245246
self.obj = Some(objfile);
246247
// Hold onto tempdir so that it doesn't get deleted early
@@ -256,7 +257,7 @@ impl SkeletonBuilder {
256257
self.skip_clang_version_check,
257258
&self.clang_args,
258259
)
259-
.map_err(|e| Error::Build(e.to_string()))?;
260+
.map_err(Error::Build)?;
260261

261262
Ok(())
262263
}
@@ -268,15 +269,15 @@ impl SkeletonBuilder {
268269
let objfile = self
269270
.obj
270271
.as_ref()
271-
.ok_or_else(|| Error::Generate("No object file".into()))?;
272+
.ok_or_else(|| Error::Generate(anyhow!("No object file")))?;
272273

273274
gen::gen_single(
274275
self.debug,
275276
objfile,
276277
gen::OutputDest::File(output.as_ref()),
277278
Some(&self.rustfmt),
278279
)
279-
.map_err(|e| Error::Generate(e.to_string()))?;
280+
.map_err(Error::Generate)?;
280281

281282
Ok(())
282283
}

0 commit comments

Comments
 (0)