Compare commits

..

2 Commits

Author SHA1 Message Date
Dennis Schwerdel 2d5565277e Fix coverage check 2020-10-07 22:41:19 +02:00
Dennis Schwerdel 3cf1072da7 Fix ifname 2020-10-07 22:38:41 +02:00
3 changed files with 311 additions and 358 deletions

View File

@ -41,7 +41,6 @@ jobs:
- name: Run cargo-tarpaulin - name: Run cargo-tarpaulin
uses: actions-rs/tarpaulin@v0.1 uses: actions-rs/tarpaulin@v0.1
with: with:
version: '0.9.0'
args: '-o Html -- --test-threads=1' args: '-o Html -- --test-threads=1'
- name: Archive code coverage results - name: Archive code coverage results
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1

658
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ use libc::{c_short, c_ulong, ioctl, IFF_NO_PI, IFF_TAP, IFF_TUN, IF_NAMESIZE};
use std::{ use std::{
collections::VecDeque, collections::VecDeque,
fmt, fs, fmt, fs,
io::{self, Error as IoError, ErrorKind, Read, Write}, io::{self, Cursor, Error as IoError, ErrorKind, Read, Write},
os::unix::io::{AsRawFd, RawFd}, os::unix::io::{AsRawFd, RawFd},
str, str,
str::FromStr str::FromStr
@ -26,7 +26,7 @@ union IfReqData {
#[repr(C)] #[repr(C)]
struct IfReq { struct IfReq {
ifr_name: [u8; IF_NAMESIZE], ifr_name: [u8; IF_NAMESIZE],
data: IfReqData data: IfReqData
} }
impl IfReq { impl IfReq {
@ -150,8 +150,10 @@ impl TunTapDevice {
let res = unsafe { ioctl(fd.as_raw_fd(), TUNSETIFF, &mut ifreq) }; let res = unsafe { ioctl(fd.as_raw_fd(), TUNSETIFF, &mut ifreq) };
match res { match res {
0 => { 0 => {
let nul_range_end = ifreq.ifr_name.iter().position(|&c| c == b'\0').unwrap_or(ifreq.ifr_name.len()); let mut ifname = String::with_capacity(32);
let ifname = unsafe { str::from_utf8_unchecked(&ifreq.ifr_name[0..nul_range_end]) }.to_string(); let mut cursor = Cursor::new(ifreq.ifr_name);
cursor.read_to_string(&mut ifname)?;
ifname = ifname.trim_end_matches('\0').to_owned();
Ok(Self { fd, ifname, type_ }) Ok(Self { fd, ifname, type_ })
} }
_ => Err(IoError::last_os_error()) _ => Err(IoError::last_os_error())