@@ -487,22 +487,28 @@ static struct cmd_struct commands[] = {
487
487
{ "write-tree" , cmd_write_tree , RUN_SETUP },
488
488
};
489
489
490
- int is_builtin (const char * s )
490
+ static struct cmd_struct * get_builtin (const char * s )
491
491
{
492
492
int i ;
493
493
for (i = 0 ; i < ARRAY_SIZE (commands ); i ++ ) {
494
- struct cmd_struct * p = commands + i ;
494
+ struct cmd_struct * p = commands + i ;
495
495
if (!strcmp (s , p -> cmd ))
496
- return 1 ;
496
+ return p ;
497
497
}
498
- return 0 ;
498
+ return NULL ;
499
+ }
500
+
501
+ int is_builtin (const char * s )
502
+ {
503
+ return !!get_builtin (s );
499
504
}
500
505
501
506
static void handle_builtin (int argc , const char * * argv )
502
507
{
503
508
const char * cmd = argv [0 ];
504
509
int i ;
505
510
static const char ext [] = STRIP_EXTENSION ;
511
+ struct cmd_struct * builtin ;
506
512
507
513
if (sizeof (ext ) > 1 ) {
508
514
i = strlen (argv [0 ]) - strlen (ext );
@@ -519,15 +525,12 @@ static void handle_builtin(int argc, const char **argv)
519
525
argv [0 ] = cmd = "help" ;
520
526
}
521
527
522
- for (i = 0 ; i < ARRAY_SIZE (commands ); i ++ ) {
523
- struct cmd_struct * p = commands + i ;
524
- if (strcmp (p -> cmd , cmd ))
525
- continue ;
526
- if (saved_environment && (p -> option & NO_SETUP )) {
528
+ builtin = get_builtin (cmd );
529
+ if (builtin ) {
530
+ if (saved_environment && (builtin -> option & NO_SETUP ))
527
531
restore_env ();
528
- break ;
529
- }
530
- exit (run_builtin (p , argc , argv ));
532
+ else
533
+ exit (run_builtin (builtin , argc , argv ));
531
534
}
532
535
}
533
536
0 commit comments