mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-22 07:58:38 +08:00
Minor tweaks to code validation for the for builtin (again)
darcs-hash:20061001155734-ac50b-6009b98dfccaf8f8292859f25c4d564c6b622f47.gz
This commit is contained in:
parent
bce4c78d49
commit
67c820cee8
16
builtin.c
16
builtin.c
@ -2462,7 +2462,7 @@ static int builtin_for( wchar_t **argv )
|
|||||||
else if ( wcsvarname(argv[1]) )
|
else if ( wcsvarname(argv[1]) )
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
_( L"%ls: '%ls' is not a valid variable name\n" ),
|
BUILTIN_FOR_ERR_NAME,
|
||||||
argv[0],
|
argv[0],
|
||||||
argv[1] );
|
argv[1] );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
@ -2521,12 +2521,16 @@ static int builtin_begin( wchar_t **argv )
|
|||||||
return proc_get_last_status();
|
return proc_get_last_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Define the function specified by the function_data_t structure. If
|
||||||
|
the do_save flag is set, also write it out to file.
|
||||||
|
*/
|
||||||
static void builtin_end_add_function_def( function_data_t *d )
|
static void builtin_end_add_function_def( function_data_t *d )
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
Copy the text from the beginning of the function
|
Copy the text from the beginning of the function
|
||||||
until the end command and use as the new definition
|
until the end command and use as the new definition
|
||||||
for the specified function
|
for the specified function
|
||||||
*/
|
*/
|
||||||
void *context = halloc( 0, 0 );
|
void *context = halloc( 0, 0 );
|
||||||
|
|
||||||
@ -3006,7 +3010,8 @@ static int builtin_return( wchar_t **argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Builtin for executing one of several blocks of commands depending on the value of an argument.
|
Builtin for executing one of several blocks of commands depending
|
||||||
|
on the value of an argument.
|
||||||
*/
|
*/
|
||||||
static int builtin_switch( wchar_t **argv )
|
static int builtin_switch( wchar_t **argv )
|
||||||
{
|
{
|
||||||
@ -3036,7 +3041,8 @@ static int builtin_switch( wchar_t **argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Builtin used together with the switch builtin for conditional execution
|
Builtin used together with the switch builtin for conditional
|
||||||
|
execution
|
||||||
*/
|
*/
|
||||||
static int builtin_case( wchar_t **argv )
|
static int builtin_case( wchar_t **argv )
|
||||||
{
|
{
|
||||||
|
@ -67,6 +67,8 @@ enum
|
|||||||
*/
|
*/
|
||||||
#define BUILTIN_FOR_ERR_COUNT _( L"%ls: Expected at least two arguments, got %d\n")
|
#define BUILTIN_FOR_ERR_COUNT _( L"%ls: Expected at least two arguments, got %d\n")
|
||||||
|
|
||||||
|
#define BUILTIN_FOR_ERR_NAME _( L"%ls: '%ls' is not a valid variable name\n" )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message when too many arguments are supplied to a builtin
|
Error message when too many arguments are supplied to a builtin
|
||||||
*/
|
*/
|
||||||
|
23
parser.c
23
parser.c
@ -3399,7 +3399,28 @@ int parser_test( const wchar_t * buff,
|
|||||||
*/
|
*/
|
||||||
if( wcscmp( cmd, L"for" ) == 0 )
|
if( wcscmp( cmd, L"for" ) == 0 )
|
||||||
{
|
{
|
||||||
if( arg_count == 2 )
|
if( arg_count == 1 )
|
||||||
|
{
|
||||||
|
|
||||||
|
if( wcsvarname( tok_last( &tok )) )
|
||||||
|
{
|
||||||
|
|
||||||
|
err = 1;
|
||||||
|
|
||||||
|
if( out )
|
||||||
|
{
|
||||||
|
error( SYNTAX_ERROR,
|
||||||
|
tok_get_pos( &tok ),
|
||||||
|
BUILTIN_FOR_ERR_NAME,
|
||||||
|
L"for",
|
||||||
|
tok_last( &tok ) );
|
||||||
|
|
||||||
|
print_errors( out, prefix );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if( arg_count == 2 )
|
||||||
{
|
{
|
||||||
if( wcscmp( tok_last( &tok ), L"in" ) != 0 )
|
if( wcscmp( tok_last( &tok ), L"in" ) != 0 )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user