Просмотр исходного кода

[drivers][serial/v2] fix missing break after -RT_EPERM when buf size is 0

When rx_bufsz or tx_bufsz is 0, the driver returns -RT_EPERM but falls
through to RT_ASSERT(rx_fifo/tx_fifo != RT_NULL). Since serial_rx/serial_tx
is NULL in non-buffered mode, this triggers an assertion failure.

Add break after setting ret = -RT_EPERM in the four affected cases:
- RT_SERIAL_CTRL_SET_RX_TIMEOUT
- RT_SERIAL_CTRL_SET_TX_TIMEOUT
- RT_SERIAL_CTRL_GET_RX_TIMEOUT
- RT_SERIAL_CTRL_GET_TX_TIMEOUT
kaidegit 2 дней назад
Родитель
Сommit
b57c80f06f
1 измененных файлов с 4 добавлено и 0 удалено
  1. 4 0
      components/drivers/serial/dev_serial_v2.c

+ 4 - 0
components/drivers/serial/dev_serial_v2.c

@@ -1466,6 +1466,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
             if (serial->config.rx_bufsz == 0)
             {
                 ret = -RT_EPERM;
+                break;
             }
 
             struct rt_serial_rx_fifo *rx_fifo = RT_NULL;
@@ -1487,6 +1488,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
             if (serial->config.tx_bufsz == 0)
             {
                 ret = -RT_EPERM;
+                break;
             }
 
             struct rt_serial_tx_fifo *tx_fifo = RT_NULL;
@@ -1507,6 +1509,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
             if (serial->config.rx_bufsz == 0)
             {
                 ret = -RT_EPERM;
+                break;
             }
 
             struct rt_serial_rx_fifo *rx_fifo = RT_NULL;
@@ -1527,6 +1530,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
             if (serial->config.tx_bufsz == 0)
             {
                 ret = -RT_EPERM;
+                break;
             }
 
             struct rt_serial_tx_fifo *tx_fifo = RT_NULL;