[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