--- trunk/mkinitrd-magellan/busybox/miscutils/less.c 2010/04/29 20:38:48 983 +++ trunk/mkinitrd-magellan/busybox/miscutils/less.c 2010/05/30 11:32:42 984 @@ -96,7 +96,6 @@ smallint pattern_valid; #endif smallint terminated; - smalluint kbd_input_size; struct termios term_orig, term_less; char kbd_input[KEYCODE_BUFFER_SIZE]; }; @@ -135,7 +134,6 @@ #define terminated (G.terminated ) #define term_orig (G.term_orig ) #define term_less (G.term_less ) -#define kbd_input_size (G.kbd_input_size ) #define kbd_input (G.kbd_input ) #define INIT_G() do { \ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ @@ -145,7 +143,7 @@ current_file = 1; \ eof_error = 1; \ terminated = 1; \ - USE_FEATURE_LESS_REGEXP(wanted_match = -1;) \ + IF_FEATURE_LESS_REGEXP(wanted_match = -1;) \ } while (0) /* flines[] are lines read from stdin, each in malloc'ed buffer. @@ -159,7 +157,7 @@ /* Reset terminal input to normal */ static void set_tty_cooked(void) { - fflush(stdout); + fflush_all(); tcsetattr(kbd_fd, TCSANOW, &term_orig); } @@ -326,7 +324,7 @@ if (option_mask32 & FLAG_N) w -= 8; - USE_FEATURE_LESS_REGEXP(again0:) + IF_FEATURE_LESS_REGEXP(again0:) p = current_line = ((char*)xmalloc(w + 4)) + 4; max_fline += last_terminated; @@ -626,7 +624,7 @@ while (match_status == 0) { char *new = xasprintf("%s%.*s"HIGHLIGHT"%.*s"NORMAL, - growline ? : "", + growline ? growline : "", match_structs.rm_so, str, match_structs.rm_eo - match_structs.rm_so, str + match_structs.rm_so); @@ -774,9 +772,7 @@ static void open_file_and_read_lines(void) { if (filename) { - int fd = xopen(filename, O_RDONLY); - dup2(fd, 0); - if (fd) close(fd); + xmove_fd(xopen(filename, O_RDONLY), STDIN_FILENO); } else { /* "less" with no arguments in argv[] */ /* For status line only */ @@ -808,7 +804,7 @@ buffer_fill_and_print(); } -static ssize_t getch_nowait(void) +static int getch_nowait(void) { int rd; struct pollfd pfd[2]; @@ -839,9 +835,9 @@ /* Position cursor if line input is done */ if (less_gets_pos >= 0) move_cursor(max_displayed_line + 2, less_gets_pos + 1); - fflush(stdout); + fflush_all(); - if (kbd_input_size == 0) { + if (kbd_input[0] == 0) { /* if nothing is buffered */ #if ENABLE_FEATURE_LESS_WINCH while (1) { int r; @@ -858,7 +854,7 @@ /* We have kbd_fd in O_NONBLOCK mode, read inside read_key() * would not block even if there is no input available */ - rd = read_key(kbd_fd, &kbd_input_size, kbd_input); + rd = read_key(kbd_fd, kbd_input); if (rd == -1) { if (errno == EAGAIN) { /* No keyboard input available. Since poll() did return, @@ -874,9 +870,9 @@ return rd; } -/* Grab a character from input without requiring the return key. If the - * character is ASCII \033, get more characters and assign certain sequences - * special return codes. Note that this function works best with raw input. */ +/* Grab a character from input without requiring the return key. + * May return KEYCODE_xxx values. + * Note that this function works best with raw input. */ static int less_getch(int pos) { int i; @@ -1511,7 +1507,7 @@ /* TODO: -x: do not interpret backspace, -xx: tab also */ /* -xxx: newline also */ /* -w N: assume width N (-xxx -w 32: hex viewer of sorts) */ - getopt32(argv, "EMmN~I" USE_FEATURE_LESS_DASHCMD("S")); + getopt32(argv, "EMmN~I" IF_FEATURE_LESS_DASHCMD("S")); argc -= optind; argv += optind; num_files = argc;