Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Appease clippy #1122

Merged
merged 2 commits into from
Dec 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 20 additions & 32 deletions aya-log-parser/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
// We implement our own formatter here and we pass literal strings on purpose.
#![allow(clippy::literal_string_with_formatting_args)]

use std::str;

use aya_log_common::DisplayHint;
Expand Down Expand Up @@ -55,39 +52,27 @@ fn push_literal(frag: &mut Vec<Fragment>, unescaped_literal: &str) -> Result<(),
Ok(())
}

/// Parses the display hint (e.g. the `ipv4` in `{:ipv4}`).
fn parse_display_hint(s: &str) -> Result<DisplayHint, String> {
Ok(match s {
"p" | "x" => DisplayHint::LowerHex,
"X" => DisplayHint::UpperHex,
"i" => DisplayHint::Ip,
"mac" => DisplayHint::LowerMac,
"MAC" => DisplayHint::UpperMac,
_ => return Err(format!("unknown display hint: {s:?}")),
})
}

/// Parse `Param` from the given `&str` which can specify an optional format
/// like `:x` or `:ipv4` (without curly braces, which are parsed by the `parse`
/// function).
fn parse_param(mut input: &str) -> Result<Parameter, String> {
const HINT_PREFIX: &str = ":";

// Then, optional hint
let mut hint = DisplayHint::Default;

if input.starts_with(HINT_PREFIX) {
// skip the prefix
input = &input[HINT_PREFIX.len()..];
if input.is_empty() {
return Err("malformed format string (missing display hint after ':')".into());
fn parse_param(input: &str) -> Result<Parameter, String> {
let hint = match input.strip_prefix(":") {
Some(input) => match input {
"" => return Err("malformed format string (missing display hint after ':')".into()),
"p" | "x" => DisplayHint::LowerHex,
"X" => DisplayHint::UpperHex,
"i" => DisplayHint::Ip,
"mac" => DisplayHint::LowerMac,
"MAC" => DisplayHint::UpperMac,
input => return Err(format!("unknown display hint: {input:?}")),
},
None => {
if !input.is_empty() {
return Err(format!("unexpected content {input:?} in format string"));
}
DisplayHint::Default
}

hint = parse_display_hint(input)?;
} else if !input.is_empty() {
return Err(format!("unexpected content {input:?} in format string"));
}

};
Ok(Parameter { hint })
}

Expand Down Expand Up @@ -145,6 +130,9 @@ pub fn parse(format_string: &str) -> Result<Vec<Fragment>, String> {
mod test {
use super::*;

// TODO(https://github.com/rust-lang/rust-clippy/issues/13885): narrow this to just the specific
// strings when that doesn't trip the lint.
#[allow(clippy::literal_string_with_formatting_args)]
#[test]
fn test_parse() {
assert_eq!(
Expand Down
12 changes: 7 additions & 5 deletions aya/src/sys/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,6 @@ fn syscall(call: Syscall<'_>) -> SysResult<i64> {
#[cfg(test)]
return TEST_SYSCALL.with(|test_impl| unsafe { test_impl.borrow()(call) });

// The type of integer taken by `ioctl` is different in glibc (i64) and
// musl (i32). musl builds would complain about useless conversion.
// `libc::ioctl` returns i32 on x86_64 while `libc::syscall` returns i64.
#[allow(clippy::useless_conversion)]
#[cfg_attr(test, allow(unreachable_code))]
{
let ret = unsafe {
Expand All @@ -112,7 +108,13 @@ fn syscall(call: Syscall<'_>) -> SysResult<i64> {
flags,
} => libc::syscall(SYS_perf_event_open, &attr, pid, cpu, group, flags),
Syscall::PerfEventIoctl { fd, request, arg } => {
let ret = libc::ioctl(fd.as_raw_fd(), request.try_into().unwrap(), arg);
// The type of integer taken by `ioctl` is different in glibc (i64) and
// musl (i32). musl builds would complain about useless conversion.
#[allow(clippy::useless_conversion)]
let request = request.try_into().unwrap();
let ret = libc::ioctl(fd.as_raw_fd(), request, arg);
// `libc::ioctl` returns i32 on x86_64 while `libc::syscall` returns i64.
#[allow(clippy::useless_conversion)]
ret.into()
}
}
Expand Down
Loading