Added unused ring_buffer_write_to_port() implementation - we might never use it,
but it shouldn't hurt to have it in SVN. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16076 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2005, Axel Dörfler, [email protected]. All rights reserved.
|
* Copyright 2005-2006, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <KernelExport.h>
|
#include <KernelExport.h>
|
||||||
#include <lock.h>
|
#include <lock.h>
|
||||||
|
#include <port.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -206,3 +207,46 @@ ring_buffer_user_write(struct ring_buffer *buffer, const uint8 *data, ssize_t le
|
|||||||
return write_to_buffer(buffer, data, length, true);
|
return write_to_buffer(buffer, data, length, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/** Sends the contents of the ring buffer to a port.
|
||||||
|
* The buffer will be empty afterwards only if sending the data actually works.
|
||||||
|
*/
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ring_buffer_write_to_port(struct ring_buffer *buffer, port_id port, int32 code,
|
||||||
|
uint32 flags, bigtime_t timeout)
|
||||||
|
{
|
||||||
|
int32 length = buffer->in;
|
||||||
|
if (length == 0)
|
||||||
|
return B_OK;
|
||||||
|
|
||||||
|
status_t status;
|
||||||
|
|
||||||
|
if (buffer->first + length <= buffer->size) {
|
||||||
|
// simple write
|
||||||
|
status = write_port_etc(port, code, buffer->buffer + buffer->first, length,
|
||||||
|
flags, timeout);
|
||||||
|
} else {
|
||||||
|
// need to write both ends
|
||||||
|
size_t upper = buffer->size - buffer->first;
|
||||||
|
size_t lower = length - upper;
|
||||||
|
|
||||||
|
iovec vecs[2];
|
||||||
|
vecs[0].iov_base = buffer->buffer + buffer->first;
|
||||||
|
vecs[0].iov_len = upper;
|
||||||
|
vecs[1].iov_base = buffer->buffer;
|
||||||
|
vecs[1].iov_len = lower;
|
||||||
|
|
||||||
|
status = writev_port_etc(port, code, vecs, 2, length, flags, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status < B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
buffer->first = (buffer->first + length) % buffer->size;
|
||||||
|
buffer->in -= length;
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user