edit in elfedit/src/lib.rs at line 943
[3.20577]→[3.20577:20578](∅→∅) replacement in elfedit/src/lib.rs at line 1031
[3.6503]→[2.2071:2212](∅→∅) − (sh.offset(id) as usize,
− sh.size(id) as usize,
− sh.type_(id),
− p_ as isize)
+ (
+ sh.offset(id) as usize,
+ sh.size(id) as usize,
+ sh.type_(id),
+ p_ as isize,
+ )
replacement in elfedit/src/lib.rs at line 1176
[2.2776]→[2.2776:3036](∅→∅) − let current_len =
− sections.iter().map(|(o, l, t, _)|
− if *t != Sht::NOBITS {
− o + l
− } else {
− 0
− })
+ let current_len = sections
+ .iter()
+ .map(|(o, l, t, _)| if *t != Sht::NOBITS { o + l } else { 0 })
replacement in elfedit/src/lib.rs at line 1180
[2.3063]→[2.3063:3184](∅→∅) − .unwrap_or(
− self.f.metadata().unwrap().len() as usize
− );
+ .unwrap_or(self.f.metadata().unwrap().len() as usize);
replacement in elfedit/src/lib.rs at line 1224
[3.13767]→[2.3519:3803](∅→∅) − let current_len =
− sections.iter().map(|(o, l, t, _)| {
− if *t != Sht::NOBITS {
− o + l
− } else {
− 0
− }
− })
+ let current_len = sections
+ .iter()
+ .map(|(o, l, t, _)| if *t != Sht::NOBITS { o + l } else { 0 })
replacement in elfedit/src/lib.rs at line 1228
[2.3830]→[2.3830:3951](∅→∅) − .unwrap_or(
− self.f.metadata().unwrap().len() as usize
− );
+ .unwrap_or(self.f.metadata().unwrap().len() as usize);
replacement in elfedit/src/lib.rs at line 1296
[2.4078]→[2.4078:4130](∅→∅) − return Err(Error::NoDynamicSection)
+ return Err(Error::NoDynamicSection);
replacement in elfedit/src/lib.rs at line 1319
[2.4198]→[2.4198:4250](∅→∅) − return Err(Error::NoDynamicSection)
+ return Err(Error::NoDynamicSection);
edit in elfedit/src/lib.rs at line 1332
edit in elfedit/src/lib.rs at line 1335
+ runpath: Option<&[u8]>,
edit in elfedit/src/lib.rs at line 1338
[3.28498]→[2.4266:4373](∅→∅) − let Some(parsed) = self.parse()? else {
− return Err(Error::NoDynamicSection)
− };
replacement in elfedit/src/lib.rs at line 1342
[2.4524]→[3.28534:28615](∅→∅),
[3.28534]→[3.28534:28615](∅→∅),
[3.28615]→[3.15582:15652](∅→∅) − let runpath = parsed.runpath()?.map(|x| x.to_bytes_with_nul().to_vec());
− remove_trailing_needed_runpath(parsed.data, dynstr, dynamic);
+ remove_trailing_needed_runpath(data, dynstr, dynamic);
replacement in elfedit/src/lib.rs at line 1358
[2.4560]→[2.4560:4596](∅→∅) − OwnedDynamic::B32(d) =>
+ OwnedDynamic::B32(d) => {
replacement in elfedit/src/lib.rs at line 1362
[2.4730]→[2.4730:4766](∅→∅) − OwnedDynamic::B64(d) =>
+ }
+ OwnedDynamic::B64(d) => {
edit in elfedit/src/lib.rs at line 1367
replacement in elfedit/src/lib.rs at line 1373
[3.15974]→[3.29055:29106](∅→∅),
[3.29055]→[3.29055:29106](∅→∅) − pub fn update(mut self) -> Result<(), Error> {
+ pub fn update<P: AsRef<std::path::Path>>(mut self, into: Option<P>) -> Result<bool, Error> {
replacement in elfedit/src/lib.rs at line 1375
[2.4944]→[2.4944:4970](∅→∅) edit in elfedit/src/lib.rs at line 1379
+ let interp_owned = p.interp.to_owned();
replacement in elfedit/src/lib.rs at line 1381
[3.29244]→[3.29244:29314](∅→∅) − self.update_sections(&mut dynstr_owned, &mut dynamic_owned)?;
+ // Avoid a reparsing in `update_sections`.
+ let p = Parsed {
+ data: p.data,
+ dynamic: dynamic_owned.as_ref(),
+ dynstr: Names(&dynstr_owned),
+ interp: interp_owned.as_deref(),
+ };
+ let runpath = p.runpath()?.map(|x| x.to_bytes_with_nul().to_vec());
+
+ self.update_sections(
+ p.data,
+ &mut dynstr_owned,
+ &mut dynamic_owned,
+ runpath.as_deref(),
+ )?;
edit in elfedit/src/lib.rs at line 1403
+
+ let into_file = if let Some(into) = into {
+ let mut f = std::fs::OpenOptions::new()
+ .read(true)
+ .write(true)
+ .create(true)
+ .open(&into)?;
+ std::fs::set_permissions(into.as_ref(), self.f.metadata()?.permissions())?;
+ std::io::copy(&mut self.f, &mut f)?;
+ Some(f)
+ } else {
+ None
+ };
+
+ let mut elf = if let Some(ref file) = into_file {
+ Elf::open(&file)?
+ } else {
+ self
+ };
replacement in elfedit/src/lib.rs at line 1424
[3.29958]→[3.16137:16203](∅→∅) − self.update_section(b".interp", &new_interp).unwrap()
+ elf.update_section(b".interp", &new_interp).unwrap()
replacement in elfedit/src/lib.rs at line 1427
[3.16265]→[3.16265:16334](∅→∅),
[3.16334]→[2.5032:5103](∅→∅) − self.update_section(b".dynstr", &dynstr_owned).unwrap();
− self.update_section(b".dynamic", dynamic_owned.as_bytes())
+ elf.update_section(b".dynstr", &dynstr_owned).unwrap();
+ elf.update_section(b".dynamic", dynamic_owned.as_bytes())
replacement in elfedit/src/lib.rs at line 1432
[3.30167]→[3.16450:16483](∅→∅) − let id = self.id().data;
+ let id = elf.id().data;
replacement in elfedit/src/lib.rs at line 1437
[3.16600]→[3.16600:16654](∅→∅) − self.update_dynamic::<u32>(id, t)
+ elf.update_dynamic::<u32>(id, t)
replacement in elfedit/src/lib.rs at line 1442
[3.16772]→[3.16772:16826](∅→∅) − self.update_dynamic::<u64>(id, t)
+ elf.update_dynamic::<u64>(id, t)
replacement in elfedit/src/lib.rs at line 1446
[3.30442]→[3.16859:16926](∅→∅) − self.update_section(b".dynamic", dynamic_owned.as_bytes())
+ elf.update_section(b".dynamic", dynamic_owned.as_bytes())
replacement in elfedit/src/lib.rs at line 1449
[3.17001]→[3.30490:30505](∅→∅),
[3.30490]→[3.30490:30505](∅→∅) edit in elfedit/src/lib.rs at line 1495
+ fn as_ref(&self) -> Dynamic {
+ match self {
+ OwnedDynamic::B32(d) => Dynamic::B32(d),
+ OwnedDynamic::B64(d) => Dynamic::B64(d),
+ }
+ }
+