forked from Bananymous/banan-os
				
			Shell: String leading and trailing whitespace from commands
This fixes a bug of inserting empty argument if command had trailing whitespace
This commit is contained in:
		
							parent
							
								
									a8d74f604e
								
							
						
					
					
						commit
						399d5338c6
					
				| 
						 | 
					@ -159,6 +159,21 @@ BAN::Optional<BAN::String> parse_dollar(BAN::StringView command, size_t& i)
 | 
				
			||||||
	return "$"sv;
 | 
						return "$"sv;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BAN::StringView strip_whitespace(BAN::StringView sv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						size_t leading = 0;
 | 
				
			||||||
 | 
						while (leading < sv.size() && isspace(sv[leading]))
 | 
				
			||||||
 | 
							leading++;
 | 
				
			||||||
 | 
						sv = sv.substring(leading);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						size_t trailing = 0;
 | 
				
			||||||
 | 
						while (trailing < sv.size() && isspace(sv[sv.size() - trailing - 1]))
 | 
				
			||||||
 | 
							trailing++;
 | 
				
			||||||
 | 
						sv = sv.substring(0, sv.size() - trailing);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sv;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BAN::Vector<BAN::Vector<BAN::String>> parse_command(BAN::StringView command_view)
 | 
					BAN::Vector<BAN::Vector<BAN::String>> parse_command(BAN::StringView command_view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	enum class State
 | 
						enum class State
 | 
				
			||||||
| 
						 | 
					@ -168,6 +183,8 @@ BAN::Vector<BAN::Vector<BAN::String>> parse_command(BAN::StringView command_view
 | 
				
			||||||
		DoubleQuote,
 | 
							DoubleQuote,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						command_view = strip_whitespace(command_view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BAN::Vector<BAN::Vector<BAN::String>> result;
 | 
						BAN::Vector<BAN::Vector<BAN::String>> result;
 | 
				
			||||||
	BAN::Vector<BAN::String> command_args;
 | 
						BAN::Vector<BAN::String> command_args;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue