david/ipxe
Archived
1
0

[cmdline] Allow "echo -n" to inhibit trailing newline

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2011-03-27 12:49:18 +01:00
parent a246434299
commit ac12324f52

View File

@ -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;
} }