From 834e01ea7c0bb786cb43366458121573db1d632c Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 7 Aug 2015 11:41:31 -0600 Subject: [PATCH] can.c: Fix a couple of missed DLC conversions --- drivers/can.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/can.c b/drivers/can.c index f1eb4d195a8..f37557205bd 100644 --- a/drivers/can.c +++ b/drivers/can.c @@ -911,10 +911,14 @@ int can_receive(FAR struct can_dev_s *dev, FAR struct can_hdr_s *hdr, if (msg && hdr->ch_id == rtr->cr_id) { + int nbytes; + /* We have the response... copy the data to the user's buffer */ memcpy(&msg->cm_hdr, hdr, sizeof(struct can_hdr_s)); - for (i = 0, dest = msg->cm_data; i < hdr->ch_dlc; i++) + + nbytes = can_dlc2bytes(hdr->ch_dlc); + for (i = 0, dest = msg->cm_data; i < nbytes; i++) { *dest++ = *data++; } @@ -935,6 +939,8 @@ int can_receive(FAR struct can_dev_s *dev, FAR struct can_hdr_s *hdr, if (nexttail != fifo->rx_head) { + int nbytes; + /* Add the new, decoded CAN message at the tail of the FIFO. * * REVISIT: In the CAN FD format, the coding of the DLC differs from @@ -946,7 +952,9 @@ int can_receive(FAR struct can_dev_s *dev, FAR struct can_hdr_s *hdr, */ memcpy(&fifo->rx_buffer[fifo->rx_tail].cm_hdr, hdr, sizeof(struct can_hdr_s)); - for (i = 0, dest = fifo->rx_buffer[fifo->rx_tail].cm_data; i < hdr->ch_dlc; i++) + + nbytes = can_dlc2bytes(hdr->ch_dlc); + for (i = 0, dest = fifo->rx_buffer[fifo->rx_tail].cm_data; i < nbytes; i++) { *dest++ = *data++; }