Add support for escaping spaces and tabs in shell.

This commit is contained in:
Jonas 'Sortie' Termansen 2012-09-09 21:03:02 +02:00
parent 5209258de0
commit ab1901976c
1 changed files with 17 additions and 3 deletions

View File

@ -314,18 +314,32 @@ void get_and_run_command()
argv[0] = NULL; argv[0] = NULL;
bool lastwasspace = true; bool lastwasspace = true;
bool escaped = false;
for ( size_t i = 0; i <= commandused; i++ ) for ( size_t i = 0; i <= commandused; i++ )
{ {
switch ( command[i] ) switch ( command[i] )
{ {
case '\\':
if ( !escaped )
{
memmove(command + i, command + i + 1, commandused+1 - (i-1));
i--;
commandused--;
escaped = true;
break;
}
case '\0': case '\0':
case ' ': case ' ':
case '\t': case '\t':
case '\n': case '\n':
command[i] = 0; if ( !command[i] || !escaped )
lastwasspace = true; {
break; command[i] = 0;
lastwasspace = true;
break;
}
default: default:
escaped = false;
if ( lastwasspace ) { argv[argc++] = command + i; } if ( lastwasspace ) { argv[argc++] = command + i; }
lastwasspace = false; lastwasspace = false;
} }