[En-Nut-Discussion] Evaluating USART IOCTL errors

Harald Kipp harald.kipp at egnite.de
Tue Jul 3 10:46:07 CEST 2012


Hi Uwe,

On 02.07.2012 17:52, Uwe Bonnes wrote:
> Hello,
> 
> our dev/usart.c IOCTL setting code doesn't honor if the lower level device
> driver signals some error. Even if the lower level driver is unable to
> fullfill the flag, the flag remains set.

Indeed, that's a bug.

 
> Is appended way of coding the right thing? It handles the
> dcb_set_flow_control cases. Only setting a feature might fail. 

You probably have some doubts, because you asked. :-) To me the code doesn't look optimal, first resetting or setting the flag, then resetting it on an error. What, if the reset fails?

Another, minor comment

  if (rc == -1)

may generate more instruction code than

  if (rc)

which is sufficient, as the called function clearly states, that 0 is returned on success.

But how about

case UART_SETLOCALECHO:
  lv = dcb->dcb_modeflags;
  if (bv)
    lv |= USART_MF_LOCALECHO;
  else
    lv &= ~USART_MF_LOCALECHO;
  if ((dcb->dcb_set_flow_control) (lv) == 0)
    dcb->dcb_modeflags = lv;
  break;

Regards,

Harald

P.S.: AFAIK the listserver silently removes attachments. No idea, how you managed to convince him, that _your_ attachment is harmless.




More information about the En-Nut-Discussion mailing list