mirror of https://github.com/ipxe/ipxe.git
[cmdline] Store exit status of failed command in errno
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/598/head
parent
e84e19d4ed
commit
5b4958388d
|
@ -59,18 +59,22 @@ static int stop_state;
|
||||||
int execv ( const char *command, char * const argv[] ) {
|
int execv ( const char *command, char * const argv[] ) {
|
||||||
struct command *cmd;
|
struct command *cmd;
|
||||||
int argc;
|
int argc;
|
||||||
|
int rc;
|
||||||
|
|
||||||
/* Count number of arguments */
|
/* Count number of arguments */
|
||||||
for ( argc = 0 ; argv[argc] ; argc++ ) {}
|
for ( argc = 0 ; argv[argc] ; argc++ ) {}
|
||||||
|
|
||||||
/* An empty command is deemed to do nothing, successfully */
|
/* An empty command is deemed to do nothing, successfully */
|
||||||
if ( command == NULL )
|
if ( command == NULL ) {
|
||||||
return 0;
|
rc = 0;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
/* Sanity checks */
|
/* Sanity checks */
|
||||||
if ( argc == 0 ) {
|
if ( argc == 0 ) {
|
||||||
DBG ( "%s: empty argument list\n", command );
|
DBG ( "%s: empty argument list\n", command );
|
||||||
return -EINVAL;
|
rc = -EINVAL;
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset getopt() library ready for use by the command. This
|
/* Reset getopt() library ready for use by the command. This
|
||||||
|
@ -82,12 +86,24 @@ int execv ( const char *command, char * const argv[] ) {
|
||||||
|
|
||||||
/* Hand off to command implementation */
|
/* Hand off to command implementation */
|
||||||
for_each_table_entry ( cmd, COMMANDS ) {
|
for_each_table_entry ( cmd, COMMANDS ) {
|
||||||
if ( strcmp ( command, cmd->name ) == 0 )
|
if ( strcmp ( command, cmd->name ) == 0 ) {
|
||||||
return cmd->exec ( argc, ( char ** ) argv );
|
rc = cmd->exec ( argc, ( char ** ) argv );
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ( "%s: command not found\n", command );
|
printf ( "%s: command not found\n", command );
|
||||||
return -ENOEXEC;
|
rc = -ENOEXEC;
|
||||||
|
|
||||||
|
done:
|
||||||
|
/* Store error number, if an error occurred */
|
||||||
|
if ( rc ) {
|
||||||
|
errno = rc;
|
||||||
|
if ( errno < 0 )
|
||||||
|
errno = -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue