aboutsummaryrefslogtreecommitdiff
path: root/console-tools/reset.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-26 15:33:10 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-26 15:33:10 +0000
commitd4f0b9476af1dc9dc20a1c2ca0bbcf9a16288851 (patch)
tree8b353c27fa6ece6d334135af850d10eec59a3688 /console-tools/reset.c
parentd686482d050da3a71eb9a50617b16d509c78b7c3 (diff)
downloadbusybox-d4f0b9476af1dc9dc20a1c2ca0bbcf9a16288851.tar.gz
reset: call "stty sane". Closes bug 1414.
reset_main 26 59 +33 static.args - 12 +12
Diffstat (limited to 'console-tools/reset.c')
-rw-r--r--console-tools/reset.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/console-tools/reset.c b/console-tools/reset.c
index bb096cf9f..bc18cd050 100644
--- a/console-tools/reset.c
+++ b/console-tools/reset.c
@@ -8,14 +8,25 @@
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-/* no options, no getopt */
-
#include "libbb.h"
+/* BTW, which "standard" package has this utility? It doesn't seem
+ * to be ncurses, coreutils, console-tools... then what? */
+
+#if ENABLE_STTY
+int stty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+#endif
+
int reset_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int reset_main(int argc, char **argv)
{
- if (isatty(1)) {
+ static const char *const args[] = {
+ "stty", "sane", NULL
+ };
+
+ /* no options, no getopt */
+
+ if (isatty(0) && isatty(1)) {
/* See 'man 4 console_codes' for details:
* "ESC c" -- Reset
* "ESC ( K" -- Select user mapping
@@ -24,7 +35,13 @@ int reset_main(int argc, char **argv)
* "ESC [ ? 25 h" -- Make cursor visible.
*/
printf("\033c\033(K\033[J\033[0m\033[?25h");
+ /* http://bugs.busybox.net/view.php?id=1414:
+ * people want it to reset echo etc: */
+#if ENABLE_STTY
+ return stty_main(2, (char**)args);
+#else
+ execvp("stty", args);
+#endif
}
return EXIT_SUCCESS;
}
-