summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/parseopt.c20
-rw-r--r--src/image/script.c2
-rw-r--r--src/include/ipxe/parseopt.h1
3 files changed, 21 insertions, 2 deletions
diff --git a/src/core/parseopt.c b/src/core/parseopt.c
index 2739bd87..57140690 100644
--- a/src/core/parseopt.c
+++ b/src/core/parseopt.c
@@ -26,7 +26,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <errno.h>
#include <getopt.h>
#include <ipxe/netdevice.h>
-#include <ipxe/image.h>
#include <ipxe/parseopt.h>
/** @file
@@ -130,6 +129,25 @@ int parse_flag ( const char *text __unused, int *flag ) {
}
/**
+ * Parse key
+ *
+ * @v text Text
+ * @ret key Key
+ * @ret rc Return status code
+ */
+int parse_key ( const char *text, unsigned int *key ) {
+
+ /* Interpret single characters as being a literal key character */
+ if ( text[0] && ! text[1] ) {
+ *key = text[0];
+ return 0;
+ }
+
+ /* Otherwise, interpret as an integer */
+ return parse_integer ( text, key );
+}
+
+/**
* Print command usage message
*
* @v cmd Command descriptor
diff --git a/src/image/script.c b/src/image/script.c
index fb89e422..460fbf03 100644
--- a/src/image/script.c
+++ b/src/image/script.c
@@ -302,7 +302,7 @@ struct prompt_options {
/** "prompt" option list */
static struct option_descriptor prompt_opts[] = {
OPTION_DESC ( "key", 'k', required_argument,
- struct prompt_options, key, parse_integer ),
+ struct prompt_options, key, parse_key ),
OPTION_DESC ( "timeout", 't', required_argument,
struct prompt_options, timeout, parse_integer ),
};
diff --git a/src/include/ipxe/parseopt.h b/src/include/ipxe/parseopt.h
index e54dac66..b5fd2203 100644
--- a/src/include/ipxe/parseopt.h
+++ b/src/include/ipxe/parseopt.h
@@ -117,6 +117,7 @@ extern int parse_string ( const char *text, const char **value );
extern int parse_integer ( const char *text, unsigned int *value );
extern int parse_netdev ( const char *text, struct net_device **netdev );
extern int parse_flag ( const char *text __unused, int *flag );
+extern int parse_key ( const char *text, unsigned int *key );
extern void print_usage ( struct command_descriptor *cmd, char **argv );
extern int reparse_options ( int argc, char **argv,
struct command_descriptor *cmd, void *opts );