Commit 82f91fe0 authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman

tty: Always handle NULL flag ptr

Most line disciplines already handle the undocumented NULL flag
ptr in their .receive_buf method; however, several don't.

Document the NULL flag ptr, and correct handling in the
N_MOUSE, N_GSM0710 and N_R394 line disciplines.
Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Acked-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6c67716d
...@@ -124,7 +124,7 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c ...@@ -124,7 +124,7 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c
{ {
struct serport *serport = (struct serport*) tty->disc_data; struct serport *serport = (struct serport*) tty->disc_data;
unsigned long flags; unsigned long flags;
unsigned int ch_flags; unsigned int ch_flags = 0;
int i; int i;
spin_lock_irqsave(&serport->lock, flags); spin_lock_irqsave(&serport->lock, flags);
...@@ -133,18 +133,20 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c ...@@ -133,18 +133,20 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c
goto out; goto out;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
switch (fp[i]) { if (fp) {
case TTY_FRAME: switch (fp[i]) {
ch_flags = SERIO_FRAME; case TTY_FRAME:
break; ch_flags = SERIO_FRAME;
break;
case TTY_PARITY:
ch_flags = SERIO_PARITY; case TTY_PARITY:
break; ch_flags = SERIO_PARITY;
break;
default:
ch_flags = 0; default:
break; ch_flags = 0;
break;
}
} }
serio_interrupt(serport->serio, cp[i], ch_flags); serio_interrupt(serport->serio, cp[i], ch_flags);
......
...@@ -2269,14 +2269,15 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp, ...@@ -2269,14 +2269,15 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
char *f; char *f;
int i; int i;
char buf[64]; char buf[64];
char flags; char flags = TTY_NORMAL;
if (debug & 4) if (debug & 4)
print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET, print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
cp, count); cp, count);
for (i = count, dp = cp, f = fp; i; i--, dp++) { for (i = count, dp = cp, f = fp; i; i--, dp++) {
flags = *f++; if (f)
flags = *f++;
switch (flags) { switch (flags) {
case TTY_NORMAL: case TTY_NORMAL:
gsm->receive(gsm, *dp); gsm->receive(gsm, *dp);
......
...@@ -1244,7 +1244,7 @@ static void r3964_receive_buf(struct tty_struct *tty, const unsigned char *cp, ...@@ -1244,7 +1244,7 @@ static void r3964_receive_buf(struct tty_struct *tty, const unsigned char *cp,
{ {
struct r3964_info *pInfo = tty->disc_data; struct r3964_info *pInfo = tty->disc_data;
const unsigned char *p; const unsigned char *p;
char *f, flags = 0; char *f, flags = TTY_NORMAL;
int i; int i;
for (i = count, p = cp, f = fp; i; i--, p++) { for (i = count, p = cp, f = fp; i; i--, p++) {
......
...@@ -84,7 +84,8 @@ ...@@ -84,7 +84,8 @@
* processing. <cp> is a pointer to the buffer of input * processing. <cp> is a pointer to the buffer of input
* character received by the device. <fp> is a pointer to a * character received by the device. <fp> is a pointer to a
* pointer of flag bytes which indicate whether a character was * pointer of flag bytes which indicate whether a character was
* received with a parity error, etc. * received with a parity error, etc. <fp> may be NULL to indicate
* all data received is TTY_NORMAL.
* *
* void (*write_wakeup)(struct tty_struct *); * void (*write_wakeup)(struct tty_struct *);
* *
...@@ -118,7 +119,8 @@ ...@@ -118,7 +119,8 @@
* processing. <cp> is a pointer to the buffer of input * processing. <cp> is a pointer to the buffer of input
* character received by the device. <fp> is a pointer to a * character received by the device. <fp> is a pointer to a
* pointer of flag bytes which indicate whether a character was * pointer of flag bytes which indicate whether a character was
* received with a parity error, etc. * received with a parity error, etc. <fp> may be NULL to indicate
* all data received is TTY_NORMAL.
* If assigned, prefer this function for automatic flow control. * If assigned, prefer this function for automatic flow control.
*/ */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment