Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a561222 authored by David Howells's avatar David Howells Committed by Linus Torvalds
Browse files

Fix the (i)Stallion driver's putchar() and break_ctl() ops



Fix the Stallion driver's putchar() and break_ctl() ops and iStallion's
putchar() to return values.

Is it actually possible for putchar() or break_ctl() to be called with tty ==
NULL or can the check be discarded?

Should stl_write() be returning 0 if tty->driver_data is NULL or tx.buf is
NULL?  Is this even possible?

I've made Stallion's functions return -EINVAL as stli_breakctl() if the checks
fail.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 781cff5c
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -1025,7 +1025,7 @@ static int stl_write(struct tty_struct *tty, const unsigned char *buf, int count

/*****************************************************************************/

static void stl_putchar(struct tty_struct *tty, unsigned char ch)
static int stl_putchar(struct tty_struct *tty, unsigned char ch)
{
	struct stlport	*portp;
	unsigned int	len;
@@ -1034,12 +1034,12 @@ static void stl_putchar(struct tty_struct *tty, unsigned char ch)
	pr_debug("stl_putchar(tty=%p,ch=%x)\n", tty, ch);

	if (tty == NULL)
		return;
		return -EINVAL;
	portp = tty->driver_data;
	if (portp == NULL)
		return;
		return -EINVAL;
	if (portp->tx.buf == NULL)
		return;
		return -EINVAL;

	head = portp->tx.head;
	tail = portp->tx.tail;
@@ -1053,6 +1053,7 @@ static void stl_putchar(struct tty_struct *tty, unsigned char ch)
			head = portp->tx.buf;
	}	
	portp->tx.head = head;
	return 0;
}

/*****************************************************************************/
@@ -1460,19 +1461,20 @@ static void stl_hangup(struct tty_struct *tty)

/*****************************************************************************/

static void stl_breakctl(struct tty_struct *tty, int state)
static int stl_breakctl(struct tty_struct *tty, int state)
{
	struct stlport	*portp;

	pr_debug("stl_breakctl(tty=%p,state=%d)\n", tty, state);

	if (tty == NULL)
		return;
		return -EINVAL;
	portp = tty->driver_data;
	if (portp == NULL)
		return;
		return -EINVAL;

	stl_sendbreak(portp, ((state == -1) ? 1 : 2));
	return 0;
}

/*****************************************************************************/