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); }