projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*: add most of the required setup_common_bufsiz() calls
[oweals/busybox.git]
/
console-tools
/
resize.c
diff --git
a/console-tools/resize.c
b/console-tools/resize.c
index b4cdf50d0bf56fa5d483b5597fc862de03277a1a..a3342a1956bc43550450a98e850e8d79777afaee 100644
(file)
--- a/
console-tools/resize.c
+++ b/
console-tools/resize.c
@@
-2,45
+2,57
@@
/*
* resize - set terminal width and height.
*
/*
* resize - set terminal width and height.
*
- * Copyright 2006 Bernhard Fischer
+ * Copyright 2006 Bernhard
Reutner-
Fischer
*
*
- * Licensed under GPLv2 or later, see file LICENSE in this
tarball for details
.
+ * Licensed under GPLv2 or later, see file LICENSE in this
source tree
.
*/
/* no options, no getopt */
*/
/* no options, no getopt */
+
+//usage:#define resize_trivial_usage
+//usage: ""
+//usage:#define resize_full_usage "\n\n"
+//usage: "Resize the screen"
+
#include "libbb.h"
#include "libbb.h"
+#include "common_bufsiz.h"
#define ESC "\033"
#define ESC "\033"
-#define old_termios (*(struct termios*)&bb_common_bufsiz1)
+#define old_termios_p ((struct termios*)bb_common_bufsiz1)
+#define INIT_G() do { setup_common_bufsiz(); } while (0)
static void
static void
-onintr(int sig
ATTRIBUTE_UNUSED
)
+onintr(int sig
UNUSED_PARAM
)
{
{
- tcsetattr(STDERR_FILENO, TCSANOW,
&old_termios
);
-
exit(1
);
+ tcsetattr(STDERR_FILENO, TCSANOW,
old_termios_p
);
+
_exit(EXIT_FAILURE
);
}
int resize_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
}
int resize_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int resize_main(int argc
, char **argv
)
+int resize_main(int argc
UNUSED_PARAM, char **argv UNUSED_PARAM
)
{
struct termios new;
{
struct termios new;
- struct winsize w = { 0,
0,0,
0 };
+ struct winsize w = { 0,
0, 0,
0 };
int ret;
int ret;
+ INIT_G();
+
/* We use _stderr_ in order to make resize usable
* in shell backticks (those redirect stdout away from tty).
* NB: other versions of resize open "/dev/tty"
* and operate on it - should we do the same?
*/
/* We use _stderr_ in order to make resize usable
* in shell backticks (those redirect stdout away from tty).
* NB: other versions of resize open "/dev/tty"
* and operate on it - should we do the same?
*/
- tcgetattr(STDERR_FILENO,
&old_termios
); /* fiddle echo */
-
new = old_termios
;
+ tcgetattr(STDERR_FILENO,
old_termios_p
); /* fiddle echo */
+
memcpy(&new, old_termios_p, sizeof(new))
;
new.c_cflag |= (CLOCAL | CREAD);
new.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
new.c_cflag |= (CLOCAL | CREAD);
new.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
- signal(SIGINT, onintr);
- signal(SIGQUIT, onintr);
- signal(SIGTERM, onintr);
- signal(SIGALRM, onintr);
+ bb_signals(0
+ + (1 << SIGINT)
+ + (1 << SIGQUIT)
+ + (1 << SIGTERM)
+ + (1 << SIGALRM)
+ , onintr);
tcsetattr(STDERR_FILENO, TCSANOW, &new);
/* save_cursor_pos 7
tcsetattr(STDERR_FILENO, TCSANOW, &new);
/* save_cursor_pos 7
@@
-51,6
+63,7
@@
int resize_main(int argc, char **argv)
*/
fprintf(stderr, ESC"7" ESC"[r" ESC"[999;999H" ESC"[6n");
alarm(3); /* Just in case terminal won't answer */
*/
fprintf(stderr, ESC"7" ESC"[r" ESC"[999;999H" ESC"[6n");
alarm(3); /* Just in case terminal won't answer */
+//BUG: death by signal won't restore termios
scanf(ESC"[%hu;%huR", &w.ws_row, &w.ws_col);
fprintf(stderr, ESC"8");
scanf(ESC"[%hu;%huR", &w.ws_row, &w.ws_col);
fprintf(stderr, ESC"8");
@@
-59,7
+72,7
@@
int resize_main(int argc, char **argv)
* (gotten via TIOCGWINSZ) and recomputing *pixel values */
ret = ioctl(STDERR_FILENO, TIOCSWINSZ, &w);
* (gotten via TIOCGWINSZ) and recomputing *pixel values */
ret = ioctl(STDERR_FILENO, TIOCSWINSZ, &w);
- tcsetattr(STDERR_FILENO, TCSANOW,
&old_termios
);
+ tcsetattr(STDERR_FILENO, TCSANOW,
old_termios_p
);
if (ENABLE_FEATURE_RESIZE_PRINT)
printf("COLUMNS=%d;LINES=%d;export COLUMNS LINES;\n",
if (ENABLE_FEATURE_RESIZE_PRINT)
printf("COLUMNS=%d;LINES=%d;export COLUMNS LINES;\n",