[PATCH 2/2] USB: symbolserial: Correct transferred data size

2015-08-17 Thread Philipp Hachtmann
The scanner (here DS3508) always returns 64 bytes per urb buffer. The first
byte indicates the data length used in the current buffer. There even was
a comment describing this. But the comment also said that we'll send
everything in the buffer to the tty layer. That means sending the actual
barcode data and lots of trailing zeroes. This patch lets the driver only
send the real data.

Signed-off-by: Philipp Hachtmann 
---
 drivers/usb/serial/symbolserial.c | 18 --
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/serial/symbolserial.c 
b/drivers/usb/serial/symbolserial.c
index 6ed8044..37f3ad1 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -60,17 +60,15 @@ static void symbol_int_callback(struct urb *urb)
 
usb_serial_debug_data(>dev, __func__, urb->actual_length, data);
 
+   /*
+* Data from the device comes with a 1 byte header:
+*
+*  ...
+*/
if (urb->actual_length > 1) {
-   data_length = urb->actual_length - 1;
-
-   /*
-* Data from the device comes with a 1 byte header:
-*
-* data...
-*  This is real data to be sent to the tty layer
-* we pretty much just ignore the size and send everything
-* else to the tty layer.
-*/
+   data_length = data[0];
+   if (data_length > (urb->actual_length - 1))
+   data_length = urb->actual_length - 1;
tty_insert_flip_string(>port, [1], data_length);
tty_flip_buffer_push(>port);
} else {
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] USB: symbolserial: Correct transferred data size

2015-08-17 Thread Philipp Hachtmann
The scanner (here DS3508) always returns 64 bytes per urb buffer. The first
byte indicates the data length used in the current buffer. There even was
a comment describing this. But the comment also said that we'll send
everything in the buffer to the tty layer. That means sending the actual
barcode data and lots of trailing zeroes. This patch lets the driver only
send the real data.

Signed-off-by: Philipp Hachtmann hac...@hachti.de
---
 drivers/usb/serial/symbolserial.c | 18 --
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/serial/symbolserial.c 
b/drivers/usb/serial/symbolserial.c
index 6ed8044..37f3ad1 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -60,17 +60,15 @@ static void symbol_int_callback(struct urb *urb)
 
usb_serial_debug_data(port-dev, __func__, urb-actual_length, data);
 
+   /*
+* Data from the device comes with a 1 byte header:
+*
+* size of data data...
+*/
if (urb-actual_length  1) {
-   data_length = urb-actual_length - 1;
-
-   /*
-* Data from the device comes with a 1 byte header:
-*
-* size of datadata...
-*  This is real data to be sent to the tty layer
-* we pretty much just ignore the size and send everything
-* else to the tty layer.
-*/
+   data_length = data[0];
+   if (data_length  (urb-actual_length - 1))
+   data_length = urb-actual_length - 1;
tty_insert_flip_string(port-port, data[1], data_length);
tty_flip_buffer_push(port-port);
} else {
-- 
2.1.4

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/