--- dlls/hidclass.sys/Makefile.in | 1 + dlls/hidclass.sys/buffer.c | 166 ++++++++++++++++++++++++++++++++++++++++++ dlls/hidclass.sys/hid.h | 13 ++++ 3 files changed, 180 insertions(+) create mode 100644 dlls/hidclass.sys/buffer.c
On 2015-06-22 03:24, Aric Stewart wrote:
--- /dev/null +++ b/dlls/hidclass.sys/buffer.c
+VOID RingBuffer_SetSize(struct __ReportRingBuffer *buffer, INT size) +{
- ReportRingBuffer *ring = (ReportRingBuffer*)buffer;
This cast+assignment in every function seems unnecessary.
- BYTE* new_buffer;
- if (size < 2 || size > 256 || size == ring->size)
return;
- EnterCriticalSection(&ring->lock);
- RingBuffer_Flush(buffer);
- new_buffer = HeapAlloc(GetProcessHeap(), 0, ring->buffer_size * size);
- HeapFree(GetProcessHeap(), 0, ring->buffer);
- ring->buffer = new_buffer;
This is missing ring->size = size;
- LeaveCriticalSection(&ring->lock);
+}
+void RingBuffer_Write(struct __ReportRingBuffer *buffer, LPVOID data) +{
- ReportRingBuffer *ring = (ReportRingBuffer*)buffer;
- int i;
- EnterCriticalSection(&ring->lock);
- memcpy(&ring->buffer[ring->end * ring->buffer_size], data, ring->buffer_size);
- ring->end++;
- if (ring->end == ring->size)
ring->end = 0;
- if (ring->start == ring->end)
- {
ring->start++;
if (ring->start == ring->size)
ring->start = 0;
- }
- for (i = 0; i < ring->pointer_count; i++)
if (ring->pointers[i] == ring->end)
ring->pointers[i] = ring->start;
This loop can go inside the if unless I'm missing something.
- LeaveCriticalSection(&ring->lock);
+}
I'm missing RingBuffer_RemovePointer, but I suppose that would be unused anyway while FsContext is broken.