dmesg: cache record regex.
This commit is contained in:
parent
e5ee286c7a
commit
07e01a5276
@ -10,6 +10,7 @@ use std::{
|
|||||||
fs::File,
|
fs::File,
|
||||||
hash::Hash,
|
hash::Hash,
|
||||||
io::{BufRead, BufReader},
|
io::{BufRead, BufReader},
|
||||||
|
sync::OnceLock,
|
||||||
};
|
};
|
||||||
use uucore::{
|
use uucore::{
|
||||||
error::{FromIo, UError, UResult, USimpleError},
|
error::{FromIo, UError, UResult, USimpleError},
|
||||||
@ -340,7 +341,7 @@ impl RecordIterator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn parse_record(&self, record_line: &str) -> Option<Record> {
|
fn parse_record(&self, record_line: &str) -> Option<Record> {
|
||||||
Self::record_regex()
|
record_regex()
|
||||||
.captures_iter(record_line)
|
.captures_iter(record_line)
|
||||||
.map(|c| c.extract())
|
.map(|c| c.extract())
|
||||||
.filter_map(|(_, [pri_fac, seq, time, msg])| {
|
.filter_map(|(_, [pri_fac, seq, time, msg])| {
|
||||||
@ -348,8 +349,10 @@ impl RecordIterator {
|
|||||||
})
|
})
|
||||||
.next()
|
.next()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn record_regex() -> Regex {
|
fn record_regex() -> &'static Regex {
|
||||||
|
RECORD_REGEX.get_or_init(|| {
|
||||||
let valid_number_pattern = "0|[1-9][0-9]*";
|
let valid_number_pattern = "0|[1-9][0-9]*";
|
||||||
let additional_fields_pattern = ",^[,;]*";
|
let additional_fields_pattern = ",^[,;]*";
|
||||||
let record_pattern = format!(
|
let record_pattern = format!(
|
||||||
@ -357,9 +360,11 @@ impl RecordIterator {
|
|||||||
valid_number_pattern, additional_fields_pattern
|
valid_number_pattern, additional_fields_pattern
|
||||||
);
|
);
|
||||||
Regex::new(&record_pattern).expect("invalid regex.")
|
Regex::new(&record_pattern).expect("invalid regex.")
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RECORD_REGEX: OnceLock<Regex> = OnceLock::new();
|
||||||
|
|
||||||
struct Record {
|
struct Record {
|
||||||
priority_facility: u32,
|
priority_facility: u32,
|
||||||
_sequence: u64,
|
_sequence: u64,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user