Skip to content

Commit 664f06e

Browse files
committed
kernel: Retain original full parameter
In some cases we want to return the value exactly as it was originally. Also drop the test-only APIs, those were really never needed. Signed-off-by: Colin Walters <[email protected]>
1 parent c5044b0 commit 664f06e

File tree

1 file changed

+16
-27
lines changed

1 file changed

+16
-27
lines changed

crates/lib/src/kernel_cmdline.rs

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -122,33 +122,18 @@ impl<'a> From<&'a [u8]> for ParameterKey<'a> {
122122
}
123123

124124
/// A single kernel command line parameter.
125-
#[derive(Debug, PartialEq, Eq)]
125+
#[derive(Debug, Eq)]
126126
pub(crate) struct Parameter<'a> {
127+
/// The full original value
128+
#[allow(dead_code)]
129+
pub parameter: &'a [u8],
127130
/// The parameter key as raw bytes
128131
pub key: ParameterKey<'a>,
129132
/// The parameter value as raw bytes, if present
130133
pub value: Option<&'a [u8]>,
131134
}
132135

133136
impl<'a> Parameter<'a> {
134-
/// Create a new parameter with the provided key and value.
135-
#[cfg(test)]
136-
pub fn new_kv<'k: 'a, 'v: 'a>(key: &'k [u8], value: &'v [u8]) -> Self {
137-
Self {
138-
key: ParameterKey(key),
139-
value: Some(value),
140-
}
141-
}
142-
143-
/// Create a new parameter with the provided key.
144-
#[cfg(test)]
145-
pub fn new_key(key: &'a [u8]) -> Self {
146-
Self {
147-
key: ParameterKey(key),
148-
value: None,
149-
}
150-
}
151-
152137
/// Returns the key as a lossy UTF-8 string.
153138
///
154139
/// Invalid UTF-8 sequences are replaced with the Unicode replacement character.
@@ -177,6 +162,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> From<&'a T> for Parameter<'a> {
177162

178163
match equals {
179164
None => Self {
165+
parameter: input,
180166
key: ParameterKey(input),
181167
value: None,
182168
},
@@ -196,6 +182,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> From<&'a T> for Parameter<'a> {
196182
.unwrap_or(value);
197183

198184
Self {
185+
parameter: input,
199186
key,
200187
value: Some(value),
201188
}
@@ -228,6 +215,13 @@ impl PartialEq for ParameterKey<'_> {
228215
}
229216
}
230217

218+
impl<'a> PartialEq for Parameter<'a> {
219+
fn eq(&self, other: &Self) -> bool {
220+
// Note we don't compare parameter because we want hyphen-dash insensitivity for the key
221+
self.key == other.key && self.value == other.value
222+
}
223+
}
224+
231225
impl std::fmt::Display for Parameter<'_> {
232226
/// Formats the parameter for display.
233227
///
@@ -334,14 +328,9 @@ mod tests {
334328
let kargs = Cmdline::from(b"foo=bar,bar2 baz=fuz wiz".as_slice());
335329
let mut iter = kargs.iter();
336330

337-
assert_eq!(iter.next(), Some(Parameter::new_kv(b"foo", b"bar,bar2")));
338-
339-
assert_eq!(
340-
iter.next(),
341-
Some(Parameter::new_kv(b"baz", b"fuz".as_slice()))
342-
);
343-
344-
assert_eq!(iter.next(), Some(Parameter::new_key(b"wiz")));
331+
assert_eq!(iter.next(), Some(Parameter::from(b"foo=bar,bar2")));
332+
assert_eq!(iter.next(), Some(Parameter::from(b"baz=fuz")));
333+
assert_eq!(iter.next(), Some(Parameter::from(b"wiz")));
345334
assert_eq!(iter.next(), None);
346335

347336
// Test the find API

0 commit comments

Comments
 (0)