From ba0b70df55a9439d5bd364df2ff17cd7875227c8 Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Thu, 5 Mar 2026 08:54:06 +0100 Subject: correct seeming parsing --- src/parse.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/parse.rs b/src/parse.rs index 27b07de..efe3b33 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -31,7 +31,7 @@ pub enum ParseError { UnexpectedPipe, - Unknownu8(u8), + Unknown(u8), } type Result = std::result::Result; @@ -63,7 +63,6 @@ fn adv(b: &mut &[u8]) { fn parse_quoted_string(b: &mut &[u8], delim: u8) -> Result> { // TODO: escape sequence stuff - *b = &b[1..]; let mut s = Vec::new(); while b.len() > 0 { if b[0] == delim { @@ -74,7 +73,12 @@ fn parse_quoted_string(b: &mut &[u8], delim: u8) -> Result> { s.push(b[0]); adv(b); } - Err(ParseError::Incomplete) + + if delim == b' ' { + Ok(s) + } else { + Err(ParseError::Incomplete) + } } impl Parse for Vec { @@ -92,7 +96,7 @@ impl Parse for Vec { } else if c.is_ascii_graphic() { parse_quoted_string(b, b' ') } else { - Err(ParseError::Unknownu8(c)) + Err(ParseError::Unknown(c)) } } } @@ -121,7 +125,7 @@ impl Parse for Command { impl Parse for Pipes { fn parse(b: &mut &[u8]) -> Result { - let cmds: Vec = vec![parse(b)?]; + let mut cmds: Vec = vec![parse(b)?]; loop { spaces(b); @@ -132,8 +136,9 @@ impl Parse for Pipes { let c = b[0]; if c == b'|' { adv(b); + cmds.push(parse(b)?); } else { - Err(ParseError::Unknownu8(c))?; + Err(ParseError::Unknown(c))?; } } } -- cgit v1.2.3