summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2010-11-21 20:48:00 +0100
committerMichael Brown2010-11-22 01:34:47 +0100
commit817c5446977647a30ccdff34748ff51046d1078b (patch)
tree2f492e544cca9ec0eba3a7afa73d95e70ff2e10d /src
parent[lotest] Use generic option-parsing library (diff)
downloadipxe-817c5446977647a30ccdff34748ff51046d1078b.tar.gz
ipxe-817c5446977647a30ccdff34748ff51046d1078b.tar.xz
ipxe-817c5446977647a30ccdff34748ff51046d1078b.zip
[time] Use generic option-parsing library
Total saving: 88 bytes. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r--src/hci/commands/time_cmd.c82
1 files changed, 58 insertions, 24 deletions
diff --git a/src/hci/commands/time_cmd.c b/src/hci/commands/time_cmd.c
index 5e2612a6d..e7ad4a768 100644
--- a/src/hci/commands/time_cmd.c
+++ b/src/hci/commands/time_cmd.c
@@ -24,24 +24,43 @@
#include <string.h>
#include <unistd.h>
#include <ipxe/command.h>
+#include <ipxe/parseopt.h>
#include <ipxe/nap.h>
#include <ipxe/timer.h>
+/** @file
+ *
+ * Time commands
+ *
+ */
+
+/** "time" options */
+struct time_options {};
+
+/** "time" option list */
+static struct option_descriptor time_opts[] = {};
+
+/** "time" command descriptor */
+static struct command_descriptor time_cmd =
+ COMMAND_DESC ( struct time_options, time_opts, 1, MAX_ARGUMENTS,
+ "<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 rc, secs;
-
- if ( argc == 1 ||
- !strcmp ( argv[1], "--help" ) ||
- !strcmp ( argv[1], "-h" ) )
- {
- printf ( "Usage:\n"
- " %s <command>\n"
- "\n"
- "Time a command\n",
- argv[0] );
- return 1;
- }
+ int secs;
+ int rc;
+
+ /* Parse options */
+ if ( ( rc = parse_options ( argc, argv, &time_cmd, &opts ) ) != 0 )
+ return rc;
start = currticks();
rc = execv ( argv[1], argv + 1 );
@@ -52,25 +71,39 @@ static int time_exec ( int argc, char **argv ) {
return rc;
}
+/** "time" command */
struct command time_command __command = {
.name = "time",
.exec = time_exec,
};
+/** "sleep" options */
+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();
delay = strtoul ( argv[1], NULL, 0 ) * ticks_per_sec();
while ( ( currticks() - start ) <= delay )
@@ -78,6 +111,7 @@ static int sleep_exec ( int argc, char **argv ) {
return 0;
}
+/** "sleep" command */
struct command sleep_command __command = {
.name = "sleep",
.exec = sleep_exec,