mirror of https://github.com/ipxe/ipxe.git
[readline] Add an optional timeout to readline_history()
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/343/head
parent
56f7d44fde
commit
b2501dd122
|
@ -241,7 +241,7 @@ static int read_value ( struct named_setting *setting, char **args __unused,
|
||||||
NULL, &setting->setting, &existing );
|
NULL, &setting->setting, &existing );
|
||||||
|
|
||||||
/* Read new value */
|
/* Read new value */
|
||||||
if ( ( rc = readline_history ( NULL, existing, NULL, value ) ) != 0 )
|
if ( ( rc = readline_history ( NULL, existing, NULL, 0, value ) ) != 0 )
|
||||||
goto err_readline;
|
goto err_readline;
|
||||||
|
|
||||||
err_readline:
|
err_readline:
|
||||||
|
|
|
@ -248,6 +248,7 @@ void history_free ( struct readline_history *history ) {
|
||||||
* @v prompt Prompt string
|
* @v prompt Prompt string
|
||||||
* @v prefill Prefill string, or NULL for no prefill
|
* @v prefill Prefill string, or NULL for no prefill
|
||||||
* @v history History buffer, or NULL for no history
|
* @v history History buffer, or NULL for no history
|
||||||
|
* @v timeout Timeout period, in ticks (0=indefinite)
|
||||||
* @ret line Line read from console (excluding terminating newline)
|
* @ret line Line read from console (excluding terminating newline)
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*
|
*
|
||||||
|
@ -255,7 +256,8 @@ void history_free ( struct readline_history *history ) {
|
||||||
* eventually call free() to release the storage.
|
* eventually call free() to release the storage.
|
||||||
*/
|
*/
|
||||||
int readline_history ( const char *prompt, const char *prefill,
|
int readline_history ( const char *prompt, const char *prefill,
|
||||||
struct readline_history *history, char **line ) {
|
struct readline_history *history, unsigned long timeout,
|
||||||
|
char **line ) {
|
||||||
char buf[READLINE_MAX];
|
char buf[READLINE_MAX];
|
||||||
struct edit_string string;
|
struct edit_string string;
|
||||||
int key;
|
int key;
|
||||||
|
@ -285,8 +287,17 @@ int readline_history ( const char *prompt, const char *prefill,
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
|
|
||||||
|
/* Get keypress */
|
||||||
|
key = getkey ( timeout );
|
||||||
|
if ( key < 0 ) {
|
||||||
|
rc = -ETIMEDOUT;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
timeout = 0;
|
||||||
|
|
||||||
/* Handle keypress */
|
/* Handle keypress */
|
||||||
key = edit_string ( &string, getkey ( 0 ) );
|
key = edit_string ( &string, key );
|
||||||
sync_console ( &string );
|
sync_console ( &string );
|
||||||
move_by = 0;
|
move_by = 0;
|
||||||
switch ( key ) {
|
switch ( key ) {
|
||||||
|
@ -342,6 +353,6 @@ int readline_history ( const char *prompt, const char *prefill,
|
||||||
char * readline ( const char *prompt ) {
|
char * readline ( const char *prompt ) {
|
||||||
char *line;
|
char *line;
|
||||||
|
|
||||||
readline_history ( prompt, NULL, NULL, &line );
|
readline_history ( prompt, NULL, NULL, 0, &line );
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ int shell ( void ) {
|
||||||
|
|
||||||
/* Read and execute commands */
|
/* Read and execute commands */
|
||||||
do {
|
do {
|
||||||
readline_history ( shell_prompt, NULL, &history, &line );
|
readline_history ( shell_prompt, NULL, &history, 0, &line );
|
||||||
if ( line ) {
|
if ( line ) {
|
||||||
rc = system ( line );
|
rc = system ( line );
|
||||||
free ( line );
|
free ( line );
|
||||||
|
|
|
@ -51,7 +51,8 @@ struct readline_history {
|
||||||
|
|
||||||
extern void history_free ( struct readline_history *history );
|
extern void history_free ( struct readline_history *history );
|
||||||
extern int readline_history ( const char *prompt, const char *prefill,
|
extern int readline_history ( const char *prompt, const char *prefill,
|
||||||
struct readline_history *history, char **line );
|
struct readline_history *history,
|
||||||
|
unsigned long timeout, char **line );
|
||||||
extern char * __malloc readline ( const char *prompt );
|
extern char * __malloc readline ( const char *prompt );
|
||||||
|
|
||||||
#endif /* _READLINE_H */
|
#endif /* _READLINE_H */
|
||||||
|
|
Loading…
Reference in New Issue