[haiku-commits] r39963 - haiku/trunk/src/add-ons/kernel/bus_managers/acpi

  • From: fredrik.holmqvist@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 27 Dec 2010 17:17:54 +0100 (CET)

Author: tqh
Date: 2010-12-27 17:17:54 +0100 (Mon, 27 Dec 2010)
New Revision: 39963
Changeset: http://dev.haiku-os.org/changeset/39963

Modified:
   haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp
Log:
Modified acpi namespace driver to match ring_buffer functions. 
A bit confused about the signedness handling in ring_buffer internals though, 
int32 to size_t.

Unnested the acpi_namespace_read function a bit and removed dead check for 
negative lengths from read. CID 4093.



Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp   
2010-12-27 08:38:34 UTC (rev 39962)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp   
2010-12-27 16:17:54 UTC (rev 39963)
@@ -18,8 +18,8 @@
 public:
        RingBuffer(size_t size = 1024);
        ~RingBuffer();  
-       ssize_t Read(void *buffer, size_t length);
-       ssize_t Write(const void *buffer, size_t length);
+       size_t Read(void *buffer, ssize_t length);
+       size_t Write(const void *buffer, ssize_t length);
        size_t WritableAmount() const;
        size_t ReadableAmount() const;
 
@@ -221,38 +221,29 @@
 acpi_namespace_read(void *_cookie, off_t position, void *buf, size_t* 
num_bytes)
 {
        acpi_ns_device_info *device = (acpi_ns_device_info *)_cookie;
-       size_t bytesRead = 0; 
-       size_t readable = 0;
-       
        RingBuffer &ringBuffer = *device->buffer;
 
-       if (ringBuffer.Lock()) {
-               readable = ringBuffer.ReadableAmount();
+       if (!ringBuffer.Lock()) {
+               *num_bytes = 0;
+               return B_ERROR;
+       }
 
-               if (readable <= 0) {
-                       ringBuffer.Unlock();
-                       status_t status = acquire_sem_etc(device->read_sem, 1, 
B_CAN_INTERRUPT, 0);
-                       if (status == B_INTERRUPTED) {
-                               *num_bytes = 0;
-                               return status;
-                       }
-                       if (!ringBuffer.Lock()) {
-                               *num_bytes = 0;
-                               return B_ERROR;
-                       }
-               }
-
-               bytesRead = ringBuffer.Read(buf, *num_bytes);
+       if (ringBuffer.ReadableAmount() == 0) {
                ringBuffer.Unlock();
+               status_t status = acquire_sem_etc(device->read_sem, 1, 
B_CAN_INTERRUPT, 0);
+               if (status != B_OK) {
+                       *num_bytes = 0;
+                       return status;
+               }
+               if (!ringBuffer.Lock()) {
+                       *num_bytes = 0;
+                       return B_ERROR;
+               }
        }
 
-       if (bytesRead < 0) {
-               *num_bytes = 0;
-               return bytesRead;
-       }
+       *num_bytes = ringBuffer.Read(buf, *num_bytes);
+       ringBuffer.Unlock();
 
-       *num_bytes = bytesRead;
-       
        return B_OK;
 }
 
@@ -388,15 +379,15 @@
 }
 
 
-ssize_t
-RingBuffer::Read(void *buffer, size_t size)
+size_t
+RingBuffer::Read(void *buffer, ssize_t size)
 {
        return ring_buffer_read(fBuffer, (uint8*)buffer, size);
 }
 
 
-ssize_t
-RingBuffer::Write(const void *buffer, size_t size)
+size_t
+RingBuffer::Write(const void *buffer, ssize_t size)
 {
        return ring_buffer_write(fBuffer, (uint8*)buffer, size);
 }


Other related posts:

  • » [haiku-commits] r39963 - haiku/trunk/src/add-ons/kernel/bus_managers/acpi - fredrik . holmqvist