#include "libbb.h"
-#if ENABLE_FEATURE_USE_TERMIOS
+/* Support for FEATURE_USE_TERMIOS */
struct globals {
int cin_fileno;
#define new_settings (G.new_settings )
#define cin_fileno (G.cin_fileno )
-#define setTermSettings(fd, argp) tcsetattr(fd, TCSANOW, argp)
+#define setTermSettings(fd, argp) do { \
+ if (ENABLE_FEATURE_USE_TERMIOS) tcsetattr(fd, TCSANOW, argp); \
+ } while(0)
#define getTermSettings(fd, argp) tcgetattr(fd, argp)
static void gotsig(int sig UNUSED_PARAM)
exit(EXIT_FAILURE);
}
-#else /* !FEATURE_USE_TERMIOS */
-#define INIT_G() ((void)0)
-#define setTermSettings(fd, argp) ((void)0)
-#endif /* FEATURE_USE_TERMIOS */
-
#define CONVERTED_TAB_SIZE 8
int more_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
if (!cin)
return bb_cat(argv);
-#if ENABLE_FEATURE_USE_TERMIOS
- cin_fileno = fileno(cin);
- getTermSettings(cin_fileno, &initial_settings);
- new_settings = initial_settings;
- new_settings.c_lflag &= ~ICANON;
- new_settings.c_lflag &= ~ECHO;
- new_settings.c_cc[VMIN] = 1;
- new_settings.c_cc[VTIME] = 0;
- setTermSettings(cin_fileno, &new_settings);
- bb_signals(0
- + (1 << SIGINT)
- + (1 << SIGQUIT)
- + (1 << SIGTERM)
- , gotsig);
-#endif
+ if (ENABLE_FEATURE_USE_TERMIOS) {
+ cin_fileno = fileno(cin);
+ getTermSettings(cin_fileno, &initial_settings);
+ new_settings = initial_settings;
+ new_settings.c_lflag &= ~ICANON;
+ new_settings.c_lflag &= ~ECHO;
+ new_settings.c_cc[VMIN] = 1;
+ new_settings.c_cc[VTIME] = 0;
+ setTermSettings(cin_fileno, &new_settings);
+ bb_signals(0
+ + (1 << SIGINT)
+ + (1 << SIGQUIT)
+ + (1 << SIGTERM)
+ , gotsig);
+ }
do {
file = stdin;
for (;;) {
input = getc(cin);
input = tolower(input);
-#if !ENABLE_FEATURE_USE_TERMIOS
- printf("\033[A"); /* up cursor */
-#endif
+ if (!ENABLE_FEATURE_USE_TERMIOS)
+ printf("\033[A"); /* cursor up */
/* Erase the last message */
printf("\r%*s\r", len, "");
/* The user may have resized the terminal.
* Re-read the dimensions. */
-#if ENABLE_FEATURE_USE_TERMIOS
- get_terminal_width_height(cin_fileno, &terminal_width, &terminal_height);
- terminal_height -= 1;
-#endif
+ if (ENABLE_FEATURE_USE_TERMIOS) {
+ get_terminal_width_height(cin_fileno, &terminal_width, &terminal_height);
+ terminal_height -= 1;
+ }
}
/* Crudely convert tabs into spaces, which are
OPT_c = (1 << 1),
OPT_f = (1 << 2),
OPT_q = (1 << 3),
-#if ENABLE_SCRIPTREPLAY
OPT_t = (1 << 4),
-#endif
};
-#if ENABLE_GETOPT_LONG
static const char getopt_longopts[] ALIGN1 =
"append\0" No_argument "a"
"command\0" Required_argument "c"
"flush\0" No_argument "f"
"quiet\0" No_argument "q"
-# if ENABLE_SCRIPTREPLAY
- "timing\0" No_argument "t"
-# endif
+ IF_SCRIPTREPLAY("timing\0" No_argument "t")
;
- applet_long_options = getopt_longopts;
-#endif
+ if (ENABLE_GETOPT_LONG)
+ applet_long_options = getopt_longopts;
+
opt_complementary = "?1"; /* max one arg */
opt = getopt32(argv, "ac:fq" IF_SCRIPTREPLAY("t") , &shell_arg);
//argc -= optind;
#define buf bb_common_bufsiz1
struct pollfd pfd[2];
int outfd, count, loop;
-#if ENABLE_SCRIPTREPLAY
- double oldtime = time(NULL);
-#endif
+ double oldtime = ENABLE_SCRIPTREPLAY ? time(NULL) : 0;
smallint fd_count = 2;
outfd = xopen(fname, mode);
goto restore;
}
if (count > 0) {
-#if ENABLE_SCRIPTREPLAY
- if (opt & OPT_t) {
+ if (ENABLE_SCRIPTREPLAY && (opt & OPT_t)) {
struct timeval tv;
double newtime;
fprintf(stderr, "%f %u\n", newtime - oldtime, count);
oldtime = newtime;
}
-#endif
full_write(STDOUT_FILENO, buf, count);
full_write(outfd, buf, count);
if (opt & OPT_f) {