Skip to content

Commit 6e273cd

Browse files
authored
Merge pull request #149 from kata-containers/bump-rust
Bump Rust version to 1.85.1
2 parents 2536e33 + bce4b0b commit 6e273cd

File tree

8 files changed

+73
-93
lines changed

8 files changed

+73
-93
lines changed
File renamed without changes.

.github/workflows/bvt.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: BVT
22
on: [pull_request]
33
env:
4-
RUST_VERSION: 1.69.0
4+
RUST_VERSION: 1.85.1
55
jobs:
66
build:
77
name: Build

src/blkio.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,14 @@ fn parse_io_stat(s: String) -> Vec<IoStat> {
181181

182182
fn parse_io_service_total(s: String) -> Result<u64> {
183183
s.lines()
184-
.filter(|x| x.split_whitespace().count() == 2)
185-
.fold(Err(Error::new(ParseError)), |_, x| {
186-
match x.split_whitespace().collect::<Vec<_>>().as_slice() {
187-
["Total", val] => val.parse::<u64>().map_err(|_| Error::new(ParseError)),
188-
_ => Err(Error::new(ParseError)),
184+
.find_map(|line| {
185+
let mut parts = line.split_whitespace();
186+
match (parts.next(), parts.next(), parts.next()) {
187+
(Some("Total"), Some(val), None) => val.parse::<u64>().ok(),
188+
_ => None,
189189
}
190190
})
191+
.ok_or_else(|| Error::new(ParseError))
191192
}
192193

193194
fn parse_blkio_data(s: String) -> Result<Vec<BlkIoData>> {

src/cpuset.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ mod tests {
602602
"1,2,3,4".to_string(),
603603
"1-5,6-7,8-9".to_string(),
604604
];
605-
let expecteds = vec![
605+
let expecteds = [
606606
vec![(1, 1), (2, 2), (4, 6), (9, 9)],
607607
vec![],
608608
vec![(1, 1)],

src/devices.rs

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -295,43 +295,48 @@ impl DevicesController {
295295
let mut s = String::new();
296296
let res = file.read_to_string(&mut s);
297297
match res {
298-
Ok(_) => {
299-
s.lines().fold(Ok(Vec::new()), |acc, line| {
300-
let ls = line.split(|c| c == ' ' || c == ':').map(|x| x.to_string()).collect::<Vec<String>>();
301-
if acc.is_err() || ls.len() != 4 {
302-
error!("allowed_devices: acc: {:?}, ls: {:?}", acc, ls);
303-
Err(Error::new(ParseError))
304-
} else {
305-
let devtype = DeviceType::from_char(ls[0].chars().next());
306-
let mut major = ls[1].parse::<i64>();
307-
let mut minor = ls[2].parse::<i64>();
308-
if major.is_err() && ls[1] == "*" {
309-
major = Ok(-1);
310-
}
311-
if minor.is_err() && ls[2] == "*" {
312-
minor = Ok(-1);
313-
}
314-
if devtype.is_none() || major.is_err() || minor.is_err() || !DevicePermissions::is_valid(&ls[3]) {
315-
error!("allowed_devices: acc: {:?}, ls: {:?}, devtype: {:?}, major {:?} minor {:?} ls3 {:?}",
316-
acc, ls, devtype, major, minor, &ls[3]);
317-
Err(Error::new(ParseError))
318-
} else {
319-
let access = DevicePermissions::from_str(&ls[3])?;
320-
let mut acc = acc.unwrap();
321-
acc.push(DeviceResource {
322-
allow: true,
323-
devtype: devtype.unwrap(),
324-
major: major.unwrap(),
325-
minor: minor.unwrap(),
326-
access,
327-
});
328-
Ok(acc)
329-
}
330-
}
331-
})
332-
},
298+
Ok(_) => s
299+
.lines()
300+
.map(|line| parse_device_line(line, true))
301+
.collect(),
333302
Err(e) => Err(Error::with_cause(ReadFailed("devices.list".to_string()), e)),
334303
}
335304
})
336305
}
337306
}
307+
308+
fn parse_device_number(s: &str) -> Result<i64> {
309+
if s == "*" {
310+
Ok(-1)
311+
} else {
312+
s.parse::<i64>().map_err(|_| Error::new(ParseError))
313+
}
314+
}
315+
316+
fn parse_device_line(line: &str, allow: bool) -> Result<DeviceResource> {
317+
let parts: Vec<&str> = line.split([' ', ':']).collect();
318+
if parts.len() != 4 {
319+
error!("allowed_devices: invalid line format: {:?}", line);
320+
return Err(Error::new(ParseError));
321+
}
322+
323+
let devtype = DeviceType::from_char(parts[0].chars().next()).ok_or_else(|| {
324+
error!("allowed_devices: invalid device type: {:?}", parts[0]);
325+
Error::new(ParseError)
326+
})?;
327+
let major = parse_device_number(parts[1]).inspect_err(|_| {
328+
error!("allowed_devices: invalid major number: {:?}", parts[1]);
329+
})?;
330+
let minor = parse_device_number(parts[2]).inspect_err(|_| {
331+
error!("allowed_devices: invalid minor number: {:?}", parts[2]);
332+
})?;
333+
let access = DevicePermissions::from_str(parts[3])?;
334+
335+
Ok(DeviceResource {
336+
allow,
337+
devtype,
338+
major,
339+
minor,
340+
access,
341+
})
342+
}

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ impl From<u64> for CgroupPid {
785785
}
786786
}
787787

788-
impl<'a> From<&'a std::process::Child> for CgroupPid {
788+
impl From<&std::process::Child> for CgroupPid {
789789
fn from(u: &std::process::Child) -> CgroupPid {
790790
CgroupPid { pid: u.id() as u64 }
791791
}

src/memory.rs

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
142142
let hier_unevict_line = ls.next().unwrap_or_default();
143143

144144
Ok(NumaStat {
145-
total_pages: total_line
146-
.split(|x| x == ' ' || x == '=')
147-
.collect::<Vec<_>>()[1]
145+
total_pages: total_line.split([' ', '=']).collect::<Vec<_>>()[1]
148146
.parse::<u64>()
149147
.unwrap_or(0),
150148
total_pages_per_node: {
@@ -157,9 +155,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
157155
})
158156
.collect()
159157
},
160-
file_pages: file_line
161-
.split(|x| x == ' ' || x == '=')
162-
.collect::<Vec<_>>()[1]
158+
file_pages: file_line.split([' ', '=']).collect::<Vec<_>>()[1]
163159
.parse::<u64>()
164160
.unwrap_or(0),
165161
file_pages_per_node: {
@@ -172,9 +168,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
172168
})
173169
.collect()
174170
},
175-
anon_pages: anon_line
176-
.split(|x| x == ' ' || x == '=')
177-
.collect::<Vec<_>>()[1]
171+
anon_pages: anon_line.split([' ', '=']).collect::<Vec<_>>()[1]
178172
.parse::<u64>()
179173
.unwrap_or(0),
180174
anon_pages_per_node: {
@@ -187,9 +181,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
187181
})
188182
.collect()
189183
},
190-
unevictable_pages: unevict_line
191-
.split(|x| x == ' ' || x == '=')
192-
.collect::<Vec<_>>()[1]
184+
unevictable_pages: unevict_line.split([' ', '=']).collect::<Vec<_>>()[1]
193185
.parse::<u64>()
194186
.unwrap_or(0),
195187
unevictable_pages_per_node: {
@@ -204,9 +196,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
204196
},
205197
hierarchical_total_pages: {
206198
if !hier_total_line.is_empty() {
207-
hier_total_line
208-
.split(|x| x == ' ' || x == '=')
209-
.collect::<Vec<_>>()[1]
199+
hier_total_line.split([' ', '=']).collect::<Vec<_>>()[1]
210200
.parse::<u64>()
211201
.unwrap_or(0)
212202
} else {
@@ -229,9 +219,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
229219
},
230220
hierarchical_file_pages: {
231221
if !hier_file_line.is_empty() {
232-
hier_file_line
233-
.split(|x| x == ' ' || x == '=')
234-
.collect::<Vec<_>>()[1]
222+
hier_file_line.split([' ', '=']).collect::<Vec<_>>()[1]
235223
.parse::<u64>()
236224
.unwrap_or(0)
237225
} else {
@@ -254,9 +242,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
254242
},
255243
hierarchical_anon_pages: {
256244
if !hier_anon_line.is_empty() {
257-
hier_anon_line
258-
.split(|x| x == ' ' || x == '=')
259-
.collect::<Vec<_>>()[1]
245+
hier_anon_line.split([' ', '=']).collect::<Vec<_>>()[1]
260246
.parse::<u64>()
261247
.unwrap_or(0)
262248
} else {
@@ -279,9 +265,7 @@ fn parse_numa_stat(s: String) -> Result<NumaStat> {
279265
},
280266
hierarchical_unevictable_pages: {
281267
if !hier_unevict_line.is_empty() {
282-
hier_unevict_line
283-
.split(|x| x == ' ' || x == '=')
284-
.collect::<Vec<_>>()[1]
268+
hier_unevict_line.split([' ', '=']).collect::<Vec<_>>()[1]
285269
.parse::<u64>()
286270
.unwrap_or(0)
287271
} else {

src/net_prio.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -94,36 +94,26 @@ impl NetPrioController {
9494
}
9595

9696
/// A map of priorities for each network interface.
97-
#[allow(clippy::iter_nth_zero, clippy::unnecessary_unwrap)]
9897
pub fn ifpriomap(&self) -> Result<HashMap<String, u64>> {
9998
self.open_path("net_prio.ifpriomap", false)
10099
.and_then(|file| {
101100
let bf = BufReader::new(file);
102-
bf.lines().fold(Ok(HashMap::new()), |acc, line| {
103-
if acc.is_err() {
104-
acc
105-
} else {
106-
let mut acc = acc.unwrap();
107-
let l = line.unwrap();
108-
let mut sp = l.split_whitespace();
109-
110-
let ifname = sp.nth(0);
111-
let ifprio = sp.nth(1);
112-
if ifname.is_none() || ifprio.is_none() {
113-
Err(Error::new(ParseError))
114-
} else {
115-
let ifname = ifname.unwrap();
116-
let ifprio = ifprio.unwrap().trim().parse();
117-
match ifprio {
118-
Err(e) => Err(Error::with_cause(ParseError, e)),
119-
Ok(_) => {
120-
acc.insert(ifname.to_string(), ifprio.unwrap());
121-
Ok(acc)
122-
}
123-
}
124-
}
125-
}
126-
})
101+
bf.lines()
102+
.map(|line| {
103+
let line = line.map_err(|_| Error::new(ParseError))?;
104+
let mut parts = line.split_whitespace();
105+
106+
let ifname = parts.next().ok_or(Error::new(ParseError))?;
107+
let ifprio_str = parts.next().ok_or(Error::new(ParseError))?;
108+
109+
let ifprio = ifprio_str
110+
.trim()
111+
.parse()
112+
.map_err(|e| Error::with_cause(ParseError, e))?;
113+
114+
Ok((ifname.to_string(), ifprio))
115+
})
116+
.collect::<Result<HashMap<String, _>>>()
127117
})
128118
}
129119

0 commit comments

Comments
 (0)