david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[time] Use generic option-parsing library

Total saving: 88 bytes.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2010-11-21 19:48:00 +00:00
parent ec42ba366f
commit 817c544697
1 changed files with 61 additions and 27 deletions

View File

@ -24,24 +24,43 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <ipxe/command.h> #include <ipxe/command.h>
#include <ipxe/parseopt.h>
#include <ipxe/nap.h> #include <ipxe/nap.h>
#include <ipxe/timer.h> #include <ipxe/timer.h>
static int time_exec ( int argc, char **argv ) { /** @file
unsigned long start; *
int rc, secs; * Time commands
*
*/
if ( argc == 1 || /** "time" options */
!strcmp ( argv[1], "--help" ) || struct time_options {};
!strcmp ( argv[1], "-h" ) )
{ /** "time" option list */
printf ( "Usage:\n" static struct option_descriptor time_opts[] = {};
" %s <command>\n"
"\n" /** "time" command descriptor */
"Time a command\n", static struct command_descriptor time_cmd =
argv[0] ); COMMAND_DESC ( struct time_options, time_opts, 1, MAX_ARGUMENTS,
return 1; "<command>", "Time a command" );
}
/**
* "time" command
*
* @v argc Argument count
* @v argv Argument list
* @ret rc Return status code
*/
static int time_exec ( int argc, char **argv ) {
struct time_options opts;
unsigned long start;
int secs;
int rc;
/* Parse options */
if ( ( rc = parse_options ( argc, argv, &time_cmd, &opts ) ) != 0 )
return rc;
start = currticks(); start = currticks();
rc = execv ( argv[1], argv + 1 ); rc = execv ( argv[1], argv + 1 );
@ -52,25 +71,39 @@ static int time_exec ( int argc, char **argv ) {
return rc; return rc;
} }
/** "time" command */
struct command time_command __command = { struct command time_command __command = {
.name = "time", .name = "time",
.exec = time_exec, .exec = time_exec,
}; };
static int sleep_exec ( int argc, char **argv ) { /** "sleep" options */
unsigned long start, delay; struct sleep_options {};
/** "sleep" option list */
static struct option_descriptor sleep_opts[] = {};
/** "sleep" command descriptor */
static struct command_descriptor sleep_cmd =
COMMAND_DESC ( struct sleep_options, sleep_opts, 1, 1,
"<seconds>", "Sleep for <seconds> seconds" );
/**
* "sleep" command
*
* @v argc Argument count
* @v argv Argument list
* @ret rc Return status code
*/
static int sleep_exec ( int argc, char **argv ) {
struct sleep_options opts;
unsigned long start, delay;
int rc;
/* Parse options */
if ( ( rc = parse_options ( argc, argv, &sleep_cmd, &opts ) ) != 0 )
return rc;
if ( argc == 1 ||
!strcmp ( argv[1], "--help" ) ||
!strcmp ( argv[1], "-h" ))
{
printf ( "Usage:\n"
" %s <seconds>\n"
"\n"
"Sleep for <seconds> seconds\n",
argv[0] );
return 1;
}
start = currticks(); start = currticks();
delay = strtoul ( argv[1], NULL, 0 ) * ticks_per_sec(); delay = strtoul ( argv[1], NULL, 0 ) * ticks_per_sec();
while ( ( currticks() - start ) <= delay ) while ( ( currticks() - start ) <= delay )
@ -78,6 +111,7 @@ static int sleep_exec ( int argc, char **argv ) {
return 0; return 0;
} }
/** "sleep" command */
struct command sleep_command __command = { struct command sleep_command __command = {
.name = "sleep", .name = "sleep",
.exec = sleep_exec, .exec = sleep_exec,