mirror of https://github.com/ipxe/ipxe.git
[cmdline] Allow "echo -n" to inhibit trailing newline
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/1/head
parent
a246434299
commit
ac12324f52
|
@ -303,6 +303,23 @@ char * concat_args ( char **args ) {
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** "echo" options */
|
||||||
|
struct echo_options {
|
||||||
|
/** Do not print trailing newline */
|
||||||
|
int no_newline;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** "echo" option list */
|
||||||
|
static struct option_descriptor echo_opts[] = {
|
||||||
|
OPTION_DESC ( "n", 'n', no_argument,
|
||||||
|
struct echo_options, no_newline, parse_flag ),
|
||||||
|
};
|
||||||
|
|
||||||
|
/** "echo" command descriptor */
|
||||||
|
static struct command_descriptor echo_cmd =
|
||||||
|
COMMAND_DESC ( struct echo_options, echo_opts, 0, MAX_ARGUMENTS,
|
||||||
|
"[-n] [...]" );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* "echo" command
|
* "echo" command
|
||||||
*
|
*
|
||||||
|
@ -310,13 +327,23 @@ char * concat_args ( char **args ) {
|
||||||
* @v argv Argument list
|
* @v argv Argument list
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
static int echo_exec ( int argc __unused, char **argv ) {
|
static int echo_exec ( int argc, char **argv ) {
|
||||||
|
struct echo_options opts;
|
||||||
char *text;
|
char *text;
|
||||||
|
int rc;
|
||||||
|
|
||||||
text = concat_args ( &argv[1] );
|
/* Parse options */
|
||||||
|
if ( ( rc = parse_options ( argc, argv, &echo_cmd, &opts ) ) != 0 )
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
/* Parse text */
|
||||||
|
text = concat_args ( &argv[optind] );
|
||||||
if ( ! text )
|
if ( ! text )
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
printf ( "%s\n", text );
|
|
||||||
|
/* Print text */
|
||||||
|
printf ( "%s%s", text, ( opts.no_newline ? "" : "\n" ) );
|
||||||
|
|
||||||
free ( text );
|
free ( text );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue