line editing: make read_line_input() not take timeout param
It's almost always -1. function old new delta read_line_input 3902 3912 +10 new_line_input_t 24 31 +7 pgetc 583 585 +2 save_command_ps_at_cur_history 80 78 -2 read_line 76 74 -2 fgetc_interactive 246 244 -2 addLines 84 82 -2 doCommands 2226 2222 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/5 up/down: 19/-12) Total: 7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
dd4b446f76
commit
84ea60ed65
@ -360,7 +360,7 @@ static void addLines(int num)
|
|||||||
* 0 on ctrl-C,
|
* 0 on ctrl-C,
|
||||||
* >0 length of input string, including terminating '\n'
|
* >0 length of input string, including terminating '\n'
|
||||||
*/
|
*/
|
||||||
len = read_line_input(NULL, "", buf, sizeof(buf), /*timeout*/ -1);
|
len = read_line_input(NULL, "", buf, sizeof(buf));
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
/* Previously, ctrl-C was exiting to shell.
|
/* Previously, ctrl-C was exiting to shell.
|
||||||
* Now we exit to ed prompt. Is in important? */
|
* Now we exit to ed prompt. Is in important? */
|
||||||
@ -789,7 +789,7 @@ static void doCommands(void)
|
|||||||
* 0 on ctrl-C,
|
* 0 on ctrl-C,
|
||||||
* >0 length of input string, including terminating '\n'
|
* >0 length of input string, including terminating '\n'
|
||||||
*/
|
*/
|
||||||
len = read_line_input(NULL, ": ", buf, sizeof(buf), /*timeout*/ -1);
|
len = read_line_input(NULL, ": ", buf, sizeof(buf));
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return;
|
return;
|
||||||
while (len && isspace(buf[--len]))
|
while (len && isspace(buf[--len]))
|
||||||
@ -892,7 +892,7 @@ static void doCommands(void)
|
|||||||
}
|
}
|
||||||
if (!dirty)
|
if (!dirty)
|
||||||
return;
|
return;
|
||||||
len = read_line_input(NULL, "Really quit? ", buf, 16, /*timeout*/ -1);
|
len = read_line_input(NULL, "Really quit? ", buf, 16);
|
||||||
/* read error/EOF - no way to continue */
|
/* read error/EOF - no way to continue */
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
return;
|
return;
|
||||||
|
@ -1639,9 +1639,9 @@ enum {
|
|||||||
* buffer[0] is used as a counter of buffered chars and must be 0
|
* buffer[0] is used as a counter of buffered chars and must be 0
|
||||||
* on first call.
|
* on first call.
|
||||||
* timeout:
|
* timeout:
|
||||||
* -2: do not poll for input;
|
* -2: do not poll(-1) for input - read() it, return on EAGAIN at once
|
||||||
* -1: poll(-1) (i.e. block);
|
* -1: poll(-1) (i.e. block even on NONBLOCKed fd)
|
||||||
* >=0: poll for TIMEOUT milliseconds, return -1/EAGAIN on timeout
|
* >=0: poll() for TIMEOUT milliseconds, return -1/EAGAIN on timeout
|
||||||
*/
|
*/
|
||||||
int64_t read_key(int fd, char *buffer, int timeout) FAST_FUNC;
|
int64_t read_key(int fd, char *buffer, int timeout) FAST_FUNC;
|
||||||
void read_key_ungets(char *buffer, const char *str, unsigned len) FAST_FUNC;
|
void read_key_ungets(char *buffer, const char *str, unsigned len) FAST_FUNC;
|
||||||
@ -1657,6 +1657,7 @@ unsigned size_from_HISTFILESIZE(const char *hp) FAST_FUNC;
|
|||||||
# endif
|
# endif
|
||||||
typedef struct line_input_t {
|
typedef struct line_input_t {
|
||||||
int flags;
|
int flags;
|
||||||
|
int timeout;
|
||||||
const char *path_lookup;
|
const char *path_lookup;
|
||||||
# if MAX_HISTORY
|
# if MAX_HISTORY
|
||||||
int cnt_history;
|
int cnt_history;
|
||||||
@ -1692,7 +1693,7 @@ line_input_t *new_line_input_t(int flags) FAST_FUNC;
|
|||||||
* 0 on ctrl-C (the line entered is still returned in 'command'),
|
* 0 on ctrl-C (the line entered is still returned in 'command'),
|
||||||
* >0 length of input string, including terminating '\n'
|
* >0 length of input string, including terminating '\n'
|
||||||
*/
|
*/
|
||||||
int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout) FAST_FUNC;
|
int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize) FAST_FUNC;
|
||||||
void show_history(const line_input_t *st) FAST_FUNC;
|
void show_history(const line_input_t *st) FAST_FUNC;
|
||||||
# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
|
# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
|
||||||
void save_history(line_input_t *st);
|
void save_history(line_input_t *st);
|
||||||
@ -1700,7 +1701,7 @@ void save_history(line_input_t *st);
|
|||||||
#else
|
#else
|
||||||
#define MAX_HISTORY 0
|
#define MAX_HISTORY 0
|
||||||
int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC;
|
int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC;
|
||||||
#define read_line_input(state, prompt, command, maxsize, timeout) \
|
#define read_line_input(state, prompt, command, maxsize) \
|
||||||
read_line_input(prompt, command, maxsize)
|
read_line_input(prompt, command, maxsize)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1267,6 +1267,7 @@ line_input_t* FAST_FUNC new_line_input_t(int flags)
|
|||||||
{
|
{
|
||||||
line_input_t *n = xzalloc(sizeof(*n));
|
line_input_t *n = xzalloc(sizeof(*n));
|
||||||
n->flags = flags;
|
n->flags = flags;
|
||||||
|
n->timeout = -1;
|
||||||
#if MAX_HISTORY > 0
|
#if MAX_HISTORY > 0
|
||||||
n->max_history = MAX_HISTORY;
|
n->max_history = MAX_HISTORY;
|
||||||
#endif
|
#endif
|
||||||
@ -2130,7 +2131,7 @@ enum {
|
|||||||
* Backspace deletes last matched char.
|
* Backspace deletes last matched char.
|
||||||
* Control keys exit search and return to normal editing (at current history line).
|
* Control keys exit search and return to normal editing (at current history line).
|
||||||
*/
|
*/
|
||||||
static int32_t reverse_i_search(void)
|
static int32_t reverse_i_search(int timeout)
|
||||||
{
|
{
|
||||||
char match_buf[128]; /* for user input */
|
char match_buf[128]; /* for user input */
|
||||||
char read_key_buffer[KEYCODE_BUFFER_SIZE];
|
char read_key_buffer[KEYCODE_BUFFER_SIZE];
|
||||||
@ -2152,8 +2153,8 @@ static int32_t reverse_i_search(void)
|
|||||||
int h;
|
int h;
|
||||||
unsigned match_buf_len = strlen(match_buf);
|
unsigned match_buf_len = strlen(match_buf);
|
||||||
|
|
||||||
//FIXME: correct timeout?
|
//FIXME: correct timeout? (i.e. count it down?)
|
||||||
ic = lineedit_read_key(read_key_buffer, -1);
|
ic = lineedit_read_key(read_key_buffer, timeout);
|
||||||
|
|
||||||
switch (ic) {
|
switch (ic) {
|
||||||
case CTRL('R'): /* searching for the next match */
|
case CTRL('R'): /* searching for the next match */
|
||||||
@ -2256,9 +2257,10 @@ static int32_t reverse_i_search(void)
|
|||||||
* (in both cases the cursor remains on the input line, '\n' is not printed)
|
* (in both cases the cursor remains on the input line, '\n' is not printed)
|
||||||
* >0 length of input string, including terminating '\n'
|
* >0 length of input string, including terminating '\n'
|
||||||
*/
|
*/
|
||||||
int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout)
|
int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
int timeout;
|
||||||
#if ENABLE_FEATURE_TAB_COMPLETION
|
#if ENABLE_FEATURE_TAB_COMPLETION
|
||||||
smallint lastWasTab = 0;
|
smallint lastWasTab = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -2297,8 +2299,15 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
|
|||||||
maxsize = MAX_LINELEN;
|
maxsize = MAX_LINELEN;
|
||||||
S.maxsize = maxsize;
|
S.maxsize = maxsize;
|
||||||
|
|
||||||
/* With zero flags, no other fields are ever used */
|
timeout = -1;
|
||||||
state = st ? st : (line_input_t*) &const_int_0;
|
/* Make state->flags == 0 if st is NULL.
|
||||||
|
* With zeroed flags, no other fields are ever referenced.
|
||||||
|
*/
|
||||||
|
state = (line_input_t*) &const_int_0;
|
||||||
|
if (st) {
|
||||||
|
state = st;
|
||||||
|
timeout = st->timeout;
|
||||||
|
}
|
||||||
#if MAX_HISTORY > 0
|
#if MAX_HISTORY > 0
|
||||||
# if ENABLE_FEATURE_EDITING_SAVEHISTORY
|
# if ENABLE_FEATURE_EDITING_SAVEHISTORY
|
||||||
if (state->hist_file)
|
if (state->hist_file)
|
||||||
@ -2510,7 +2519,7 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
|
|||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_REVERSE_SEARCH
|
#if ENABLE_FEATURE_REVERSE_SEARCH
|
||||||
case CTRL('R'):
|
case CTRL('R'):
|
||||||
ic = ic_raw = reverse_i_search();
|
ic = ic_raw = reverse_i_search(timeout);
|
||||||
goto again;
|
goto again;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -10185,8 +10185,8 @@ preadfd(void)
|
|||||||
if (!iflag || g_parsefile->pf_fd != STDIN_FILENO)
|
if (!iflag || g_parsefile->pf_fd != STDIN_FILENO)
|
||||||
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
|
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
|
||||||
else {
|
else {
|
||||||
int timeout = -1;
|
|
||||||
# if ENABLE_ASH_IDLE_TIMEOUT
|
# if ENABLE_ASH_IDLE_TIMEOUT
|
||||||
|
int timeout = -1;
|
||||||
if (iflag) {
|
if (iflag) {
|
||||||
const char *tmout_var = lookupvar("TMOUT");
|
const char *tmout_var = lookupvar("TMOUT");
|
||||||
if (tmout_var) {
|
if (tmout_var) {
|
||||||
@ -10195,12 +10195,13 @@ preadfd(void)
|
|||||||
timeout = -1;
|
timeout = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
line_input_state->timeout = timeout;
|
||||||
# endif
|
# endif
|
||||||
# if ENABLE_FEATURE_TAB_COMPLETION
|
# if ENABLE_FEATURE_TAB_COMPLETION
|
||||||
line_input_state->path_lookup = pathval();
|
line_input_state->path_lookup = pathval();
|
||||||
# endif
|
# endif
|
||||||
reinit_unicode_for_ash();
|
reinit_unicode_for_ash();
|
||||||
nr = read_line_input(line_input_state, cmdedit_prompt, buf, IBUFSIZ, timeout);
|
nr = read_line_input(line_input_state, cmdedit_prompt, buf, IBUFSIZ);
|
||||||
if (nr == 0) {
|
if (nr == 0) {
|
||||||
/* ^C pressed, "convert" to SIGINT */
|
/* ^C pressed, "convert" to SIGINT */
|
||||||
write(STDOUT_FILENO, "^C", 2);
|
write(STDOUT_FILENO, "^C", 2);
|
||||||
|
@ -2411,8 +2411,7 @@ static int get_user_input(struct in_str *i)
|
|||||||
/* buglet: SIGINT will not make new prompt to appear _at once_,
|
/* buglet: SIGINT will not make new prompt to appear _at once_,
|
||||||
* only after <Enter>. (^C works immediately) */
|
* only after <Enter>. (^C works immediately) */
|
||||||
r = read_line_input(G.line_input_state, prompt_str,
|
r = read_line_input(G.line_input_state, prompt_str,
|
||||||
G.user_input_buf, CONFIG_FEATURE_EDITING_MAX_LEN-1,
|
G.user_input_buf, CONFIG_FEATURE_EDITING_MAX_LEN-1
|
||||||
/*timeout*/ -1
|
|
||||||
);
|
);
|
||||||
/* read_line_input intercepts ^C, "convert" it to SIGINT */
|
/* read_line_input intercepts ^C, "convert" it to SIGINT */
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
|
@ -644,7 +644,7 @@ read_line(const char *prompt)
|
|||||||
{
|
{
|
||||||
int sz;
|
int sz;
|
||||||
|
|
||||||
sz = read_line_input(NULL, prompt, line_buffer, sizeof(line_buffer), /*timeout*/ -1);
|
sz = read_line_input(NULL, prompt, line_buffer, sizeof(line_buffer));
|
||||||
if (sz <= 0)
|
if (sz <= 0)
|
||||||
exit(EXIT_SUCCESS); /* Ctrl-D or Ctrl-C */
|
exit(EXIT_SUCCESS); /* Ctrl-D or Ctrl-C */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user