[haiku-commits] r42151 - haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial

  • From: mmlr@xxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 13 Jun 2011 19:54:59 +0200 (CEST)

Author: mmlr
Date: 2011-06-13 19:54:59 +0200 (Mon, 13 Jun 2011)
New Revision: 42151
Changeset: https://dev.haiku-os.org/changeset/42151

Modified:
   haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp
Log:
* When determining the bit to be set for RTS/DTR there was a missing comparison
  to op which would've caused a wrong line state to be set.
* Add some more allocation checks.
* Some cleanup.


Modified: 
haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp    
2011-06-13 17:35:37 UTC (rev 42150)
+++ haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp    
2011-06-13 17:54:59 UTC (rev 42151)
@@ -54,12 +54,12 @@
 {
        Removed();
 
-       if (fDoneRead >= B_OK)
+       if (fDoneRead >= 0)
                delete_sem(fDoneRead);
-       if (fDoneWrite >= B_OK)
+       if (fDoneWrite >= 0)
                delete_sem(fDoneWrite);
 
-       if (fBufferArea >= B_OK)
+       if (fBufferArea >= 0)
                delete_area(fBufferArea);
 }
 
@@ -68,13 +68,20 @@
 SerialDevice::Init()
 {
        fDoneRead = create_sem(0, "usb_serial:done_read");
+       if (fDoneRead < 0)
+               return fDoneRead;
+
        fDoneWrite = create_sem(0, "usb_serial:done_write");
+       if (fDoneWrite < 0)
+               return fDoneWrite;
 
        size_t totalBuffers = fReadBufferSize + fOutputBufferSize + 
fWriteBufferSize
                + fInterruptBufferSize;
        fBufferArea = create_area("usb_serial:buffers_area", (void 
**)&fReadBuffer,
                B_ANY_KERNEL_ADDRESS, ROUNDUP(totalBuffers, B_PAGE_SIZE), 
B_CONTIGUOUS,
                B_READ_AREA | B_WRITE_AREA);
+       if (fBufferArea < 0)
+               return fBufferArea;
 
        fOutputBuffer = fReadBuffer + fReadBufferSize;
        fWriteBuffer = fOutputBuffer + fOutputBufferSize;
@@ -230,7 +237,7 @@
                case TTYSETRTS:
                {
                        bool set = *(bool *)buffer;
-                       uint8 bit = TTYSETDTR ? USB_CDC_CONTROL_SIGNAL_STATE_DTR
+                       uint8 bit = op == TTYSETDTR ? 
USB_CDC_CONTROL_SIGNAL_STATE_DTR
                                : USB_CDC_CONTROL_SIGNAL_STATE_RTS;
                        if (set)
                                fControlOut |= bit;


Other related posts:

  • » [haiku-commits] r42151 - haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial - mmlr