less: small shrink

This commit is contained in:
Denis Vlasenko 2008-02-23 12:22:17 +00:00
parent a7259b64e8
commit d553faf5a5

View File

@ -172,12 +172,9 @@ static void set_tty_cooked(void)
/* Exit the program gracefully */ /* Exit the program gracefully */
static void less_exit(int code) static void less_exit(int code)
{ {
/* TODO: We really should save the terminal state when we start,
* and restore it when we exit. Less does this with the
* "ti" and "te" termcap commands; can this be done with
* only termios.h? */
bb_putchar('\n'); bb_putchar('\n');
fflush_stdout_and_exit(code); set_tty_cooked();
exit(code); /* TODO: "suicide mode" for code == -signal */
} }
/* Move the cursor to a position (x,y), where (0,0) is the /* Move the cursor to a position (x,y), where (0,0) is the
@ -754,6 +751,7 @@ static char* less_gets(int sz)
less_gets_pos = sz + i; less_gets_pos = sz + i;
getch_nowait(&c, 1); getch_nowait(&c, 1);
if (c == 0x0d) { if (c == 0x0d) {
result[i] = '\0';
less_gets_pos = -1; less_gets_pos = -1;
return result; return result;
} }
@ -762,7 +760,6 @@ static char* less_gets(int sz)
if (c == 8 && i) { if (c == 8 && i) {
printf("\x8 \x8"); printf("\x8 \x8");
i--; i--;
result[i] = '\0';
} }
if (c < ' ') if (c < ' ')
continue; continue;
@ -771,7 +768,6 @@ static char* less_gets(int sz)
bb_putchar(c); bb_putchar(c);
result[i++] = c; result[i++] = c;
result = xrealloc(result, i+1); result = xrealloc(result, i+1);
result[i] = '\0';
} }
} }
@ -1334,8 +1330,7 @@ static void keypress_process(int keypress)
static void sig_catcher(int sig ATTRIBUTE_UNUSED) static void sig_catcher(int sig ATTRIBUTE_UNUSED)
{ {
set_tty_cooked(); less_exit(1) /* TODO: "suicide mode" for code == -signal */
exit(1);
} }
int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@ -1382,8 +1377,6 @@ int less_main(int argc, char **argv)
if (option_mask32 & FLAG_TILDE) if (option_mask32 & FLAG_TILDE)
empty_line_marker = ""; empty_line_marker = "";
bb_signals(BB_SIGS_FATAL, sig_catcher);
tcgetattr(kbd_fd, &term_orig); tcgetattr(kbd_fd, &term_orig);
term_less = term_orig; term_less = term_orig;
term_less.c_lflag &= ~(ICANON | ECHO); term_less.c_lflag &= ~(ICANON | ECHO);
@ -1392,6 +1385,9 @@ int less_main(int argc, char **argv)
term_less.c_cc[VMIN] = 1; term_less.c_cc[VMIN] = 1;
term_less.c_cc[VTIME] = 0; term_less.c_cc[VTIME] = 0;
/* We want to restore term_orig on exit */
bb_signals(BB_SIGS_FATAL, sig_catcher);
reinitialize(); reinitialize();
while (1) { while (1) {
keypress = less_getch(-1); /* -1: do not position cursor */ keypress = less_getch(-1); /* -1: do not position cursor */