summaryrefslogtreecommitdiff
path: root/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch')
-rw-r--r--meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch
new file mode 100644
index 000000000..3a7e0fd94
--- /dev/null
+++ b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-n_tty-move-echoctl-check-and-clean-up-logic.patch
@@ -0,0 +1,91 @@
+commit 62b263585bb5005d44a764c90d80f9c4bb8188c1
+Author: Joe Peterson <joe@skyrush.com>
+Date: Wed Sep 9 15:03:47 2009 -0600
+
+ n_tty: move echoctl check and clean up logic
+
+ Check L_ECHOCTL before insertting a character in the echo buffer
+ (rather than as the buffer is processed), to be more consistent with
+ when all other L_ flags are checked. Also cleaned up the related logic.
+
+ Note that this and the previous patch ("n_tty: honor opost flag for echoes")
+ were verified together by the reporters of the bug that patch addresses
+ (http://bugs.linuxbase.org/show_bug.cgi?id=2692), and the test now passes.
+
+ Signed-off-by: Joe Peterson <joe@skyrush.com>
+ Cc: Linus Torvalds <torvalds@linux-foundation.org>
+ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c
+index e6eeeb2..2e50f4d 100644
+--- a/drivers/char/n_tty.c
++++ b/drivers/char/n_tty.c
+@@ -576,33 +576,23 @@ static void process_echoes(struct tty_struct *tty)
+ break;
+
+ default:
+- if (iscntrl(op)) {
+- if (L_ECHOCTL(tty)) {
+- /*
+- * Ensure there is enough space
+- * for the whole ctrl pair.
+- */
+- if (space < 2) {
+- no_space_left = 1;
+- break;
+- }
+- tty_put_char(tty, '^');
+- tty_put_char(tty, op ^ 0100);
+- tty->column += 2;
+- space -= 2;
+- } else {
+- if (!space) {
+- no_space_left = 1;
+- break;
+- }
+- tty_put_char(tty, op);
+- space--;
+- }
+- }
+ /*
+- * If above falls through, this was an
+- * undefined op.
++ * If the op is not a special byte code,
++ * it is a ctrl char tagged to be echoed
++ * as "^X" (where X is the letter
++ * representing the control char).
++ * Note that we must ensure there is
++ * enough space for the whole ctrl pair.
++ *
+ */
++ if (space < 2) {
++ no_space_left = 1;
++ break;
++ }
++ tty_put_char(tty, '^');
++ tty_put_char(tty, op ^ 0100);
++ tty->column += 2;
++ space -= 2;
+ cp += 2;
+ nr -= 2;
+ }
+@@ -809,8 +799,8 @@ static void echo_char_raw(unsigned char c, struct tty_struct *tty)
+ * Echo user input back onto the screen. This must be called only when
+ * L_ECHO(tty) is true. Called from the driver receive_buf path.
+ *
+- * This variant tags control characters to be possibly echoed as
+- * as "^X" (where X is the letter representing the control char).
++ * This variant tags control characters to be echoed as "^X"
++ * (where X is the letter representing the control char).
+ *
+ * Locking: echo_lock to protect the echo buffer
+ */
+@@ -823,7 +813,7 @@ static void echo_char(unsigned char c, struct tty_struct *tty)
+ add_echo_byte(ECHO_OP_START, tty);
+ add_echo_byte(ECHO_OP_START, tty);
+ } else {
+- if (iscntrl(c) && c != '\t')
++ if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t')
+ add_echo_byte(ECHO_OP_START, tty);
+ add_echo_byte(c, tty);
+ }